РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
44 of 258 menu

Метод groupBy

Метод groupBy класса QueryBuilder добавляет в DQL-запрос конструкцию GROUP BY и принимает первым параметром поле или выражение для группировки. Его вызывают на объекте QueryBuilder при построении запроса через createQueryBuilder. Метод возвращает тот же объект QueryBuilder, поэтому его можно вызывать в цепочке с другими методами.

Синтаксис

groupBy(string $groupBy): self

Пример

Давайте сгруппируем записи по полю text и выведем DQL-запрос:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select('a') ->from(Article::class, 'a') ->groupBy('a.text'); return new Response($qb->getDQL()); } } ?>

Результат выполнения кода:

"SELECT a FROM AppEntityArticle a GROUP BY a.text"

Пример

Давайте сгруппируем записи по полю string и выполним запрос, получив количество записей в каждой группе:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select('a.string, COUNT(a.id) as cnt') ->from(Article::class, 'a') ->groupBy('a.string'); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

[["string" => "abcde", "cnt" => 2], ["string" => "article", "cnt" => 3]]

Пример

Давайте сгруппируем записи с условием where по полю integer:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select('a.integer, COUNT(a.id) as cnt') ->from(Article::class, 'a') ->where('a.boolean = :flag') ->setParameter('flag', true) ->groupBy('a.integer'); return new Response($qb->getDQL()); } } ?>

Результат выполнения кода:

"SELECT a.integer, COUNT(a.id) as cnt FROM AppEntityArticle a WHERE a.boolean = :flag GROUP BY a.integer"

Смотрите также

  • класс QueryBuilder,
    который строит DQL-запросы в Doctrine
  • метод addGroupBy,
    который добавляет ещё одно поле в группировку
  • метод having,
    который задаёт условие для сгруппированных записей
  • метод orderBy,
    который задаёт сортировку результата
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить