Метод addGroupBy
Метод addGroupBy класса QueryBuilder добавляет
новое выражение группировки в секцию GROUP BY
DQL-запроса. В отличие от метода groupBy, который
заменяет все ранее установленные выражения группировки,
addGroupBy добавляет поле к уже имеющимся.
Первым параметром передаётся строка с именем поля
или выражением группировки.
Синтаксис
addGroupBy(string $groupBy): QueryBuilder
Пример
Давайте сгруппируем статьи по полю category и
посчитаем их количество:
<?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.category, COUNT(a.id) as cnt')
->from(Article::class, 'a')
->addGroupBy('a.category');
$res = $qb->getQuery()->getResult();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[{"category": "abcde", "cnt": 3}, {"category": "article", "cnt": 5}]
Пример
Давайте добавим группировку сразу по двум полям,
используя addGroupBy дважды:
<?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.category, a.status, COUNT(a.id) as cnt')
->from(Article::class, 'a')
->addGroupBy('a.category')
->addGroupBy('a.status');
$res = $qb->getQuery()->getResult();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[{"category": "abcde", "status": true, "cnt": 2}, {"category": "article", "status": false, "cnt": 4}]
Смотрите также
-
метод
groupBy,
который заменяет выражения группировки -
метод
having,
который задаёт условие для сгруппированных данных -
метод
select,
который задаёт выбираемые поля -
класс
QueryBuilder,
который строит DQL-запросы