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

Метод andHaving

Метод andHaving класса QueryBuilder добавляет новое условие в секцию HAVING SQL-запроса, объединяя его с предыдущими условиями через логический оператор AND. Первым параметром передаётся строка с условием. Вторым необязательным параметром можно передать имя параметра-заглушки для безопасной подстановки значений. Метод возвращает тот же объект QueryBuilder, что позволяет строить цепочки вызовов.

Синтаксис

andHaving($having, $parameter = null)

Пример

Давайте сгруппируем статьи по полю text и оставим только те группы, где количество записей больше 1:

<?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.text', 'COUNT(a.id) as cnt') ->from(Article::class, 'a') ->groupBy('a.text') ->having('COUNT(a.id) > :cnt') ->setParameter('cnt', 1); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

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

[{"text": "abcde", "cnt": 3}, {"text": "hello", "cnt": 2}]

Пример

Давайте добавим второе условие через andHaving, чтобы отфильтровать группы ещё и по количеству:

<?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.text', 'COUNT(a.id) as cnt') ->from(Article::class, 'a') ->groupBy('a.text') ->having('COUNT(a.id) > :min') ->andHaving('COUNT(a.id) < :max') ->setParameter('min', 1) ->setParameter('max', 5); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

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

[{"text": "abcde", "cnt": 3}, {"text": "hello", "cnt": 2}]

Пример

Давайте передадим имя параметра вторым аргументом метода andHaving вместо использования setParameter:

<?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.text', 'COUNT(a.id) as cnt') ->from(Article::class, 'a') ->groupBy('a.text') ->having('COUNT(a.id) > :min') ->andHaving('COUNT(a.id) < :max', 'max') ->setParameter('min', 1) ->setParameter('max', 5); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

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

[{"text": "abcde", "cnt": 3}, {"text": "hello", "cnt": 2}]

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

  • метод having,
    который задаёт первое условие HAVING
  • метод groupBy,
    который группирует записи по полю
  • метод setParameter,
    который задаёт значение параметра-заглушки
  • класс QueryBuilder,
    который строит DQL-запросы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить