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

Метод distinct

Метод distinct класса QueryBuilder включает режим DISTINCT в DQL-запросе. Этот режим убирает дубликаты строк из результата выборки. Метод не принимает параметров и возвращает тот же объект QueryBuilder, что позволяет выстраивать цепочку вызовов. Обычно distinct применяют вместе с select, когда нужно получить уникальные значения одного или нескольких полей сущности.

Синтаксис

$qb->distinct()

Пример

Давайте создадим QueryBuilder и включим режим distinct для выборки уникальных значений поля name:

<?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.name') ->from(Article::class, 'a') ->distinct(); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

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

[{"name": "abcde"}, {"name": "article"}, {"name": "hello"}]

Пример

Давайте получим уникальные комбинации полей name и active:

<?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.name', 'a.active') ->from(Article::class, 'a') ->distinct(); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

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

[{"name": "abcde", "active": true}, {"name": "article", "active": false}]

Пример

Давайте посмотрим, какой DQL-запрос генерируется при вызове distinct:

<?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.name') ->from(Article::class, 'a') ->distinct(); $dql = $qb->getDQL(); return new Response($dql); } } ?>

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

"SELECT DISTINCT a.name FROM AppEntityArticle a"

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

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