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

Метод createQueryBuilder

Метод createQueryBuilder класса EntityManager создаёт объект QueryBuilder, который позволяет строить DQL-запросы программно, без написания сырого DQL вручную. Первым параметром передаётся псевдоним сущности в запросе, вторым - сама сущность (обычно в виде MyEntity::class). После создания строителя можно добавлять методы select, from, where, orderBy и получать результат через getQuery и getResult.

Синтаксис

public function createQueryBuilder(string $alias, string $entityClass = null): QueryBuilder

Пример

Давайте создадим простейший QueryBuilder и выберем все записи сущности Article:

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

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

"5"

Пример

Давайте добавим условие отбора и упорядочивание:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder('a') ->select('a') ->from(Article::class, 'a') ->where('a.published = :published') ->setParameter('published', true) ->orderBy('a.createdAt', 'DESC'); $res = $qb->getQuery()->getResult(); return new Response(count($res)); } } ?>

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

"3"

Пример

Давайте получим только одну запись с помощью setMaxResults и getOneOrNullResult:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function show(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder('a') ->select('a') ->from(Article::class, 'a') ->where('a.id = :id') ->setParameter('id', 1) ->setMaxResults(1); $article = $qb->getQuery()->getOneOrNullResult(); return new Response($article->getTitle()); } } ?>

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

"abcde"

Пример

Давайте посчитаем количество записей через агрегатную функцию COUNT:

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

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

"5"

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

  • класс EntityManager,
    который управляет сущностями и их состоянием
  • метод createQuery,
    который создаёт DQL-запрос из строки
  • метод getRepository,
    который возвращает репозиторий сущности
  • метод find,
    который находит сущность по первичному ключу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить