Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
08/05/2020, by maria

Для группировки по заданному полю используйте метод groupBy().

$query->groupBy('uid');

Приведенный выше код будет указывать запрос на группировку по полю uid. Обратите внимание, что имя поля здесь должно быть псевдонимом, созданным методами addField() или addExpression(), поэтому в большинстве случаев вы захотите использовать возвращаемое значение из этих методов, чтобы убедиться, что используется правильный псевдоним.

Чтобы получить количество строк, сгруппированных по полю, например, uid, вы можете выполнить следующее:

$query->addExpression('count(uid)', 'uid_node_count');

Чтобы сгруппировать по нескольким полям, просто вызовите groupBy() несколько раз в нужном порядке.

Having

Можно добавить условие для агрегированных значений.

$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);

В этом примере будут найдены случаи, когда число идентификаторов uid больше или равно $limit. Обратите внимание, что первый параметр наличия не фильтруется перед отправкой в базу данных, поэтому пользовательские значения должны передаваться через второй параметр.

Примеры groupBy и having

Следующий код подсчитывает количество узлов на UID:

$query = $connection->select('node', 'n')
  ->fields('n', ['uid']);
$query->addExpression('count(uid)', 'uid_node_count');
$query->groupBy("n.uid");
$query->execute();

Следующий блок кода берет предыдущий пример подсчета узлов на uid и ограничивает результаты uids, которые имеют как минимум 2 записи.

$query = $connection->select('node', 'n')
    ->fields('n',['uid']);
$query->addExpression('count(uid)', 'uid_node_count');
$query->groupBy("n.uid");
$query->having('COUNT(uid) >= :matches', [':matches' => 2]);
$results = $query->execute();

 

Source URL:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.