DB API в drupal позволяет стоить, наверное, почти любые запросы, какие только можно составить на чистом sql. Приведенный ниже сниппет кода демонстрирует вывод публикаций, у которых отсутствуют переводы контента.
Для начала требуется получить полный список языков переводов.
1 2 3 |
$langcodes = \Drupal::languageManager()->getLanguages(); $langcodesList = array_keys($langcodes); |
Кол-во элементов массива $langcodesList — это все требуемые языки.
Теперь выберем публикации, у которых число записей в node_field_data меньше, чем требуемое число языков. Здесь понадобится группировка и условие having:
1 2 3 4 5 6 7 8 |
$query = \Drupal::database()->select('node', 'n'); $query->addField('n', 'nid'); $query->addExpression('COUNT(*)', 'count'); $query->join('node_field_data', 'nfd', 'nfd.nid = n.nid'); $query->groupBy('n.nid'); $query->having('count < :cnt', [':cnt' => sizeof($langcodesList)]); $entries = $query->execute()->fetchAll(\PDO::FETCH_ASSOC); |
С помощью devel выведем:
1 |
dpm($entries); |
Результат будет выглядеть так: по каждой ноде получим nid и кол-во языков (у меня в примере их 4, поэтому нода всего с двумя языками попала в выдачу).