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

Метод createQueryBuilder

Метод createQueryBuilder принадлежит классу ServiceEntityRepository и создаёт объект QueryBuilder для построения DQL-запросов к базе данных. Первым параметром передаётся псевдоним сущности (алиас), который затем используется в запросе. Вторым необязательным параметром можно передать индекс для кэширования результатов. Метод возвращает готовый QueryBuilder, к которому можно цепочкой применять методы select, where, orderBy и другие.

Синтаксис

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

Пример

Давайте создадим репозиторий для сущности Article и получим все записи, отсортированные по полю id:

<?php namespace AppRepository; use AppEntityArticle; use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository; use DoctrinePersistenceManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findAllOrdered(): array { return $this->createQueryBuilder('a') ->orderBy('a.id', 'ASC') ->getQuery() ->getResult(); } } ?>

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

["article 1", "article 2", "article 3"]

Пример

Давайте отфильтруем записи по булеву полю published и ограничим выборку десятью записями:

<?php namespace AppRepository; use AppEntityArticle; use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository; use DoctrinePersistenceManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findPublished(): array { return $this->createQueryBuilder('a') ->where('a.published = :published') ->setParameter('published', true) ->setMaxResults(10) ->getQuery() ->getResult(); } } ?>

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

["article 1", "article 2", "article 3"]

Пример

Давайте используем конструктор запросов прямо в контроллере, получив репозиторий через внедрение зависимостей:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(ArticleRepository $repository): Response { $res = $repository->createQueryBuilder('a') ->select('a.title', 'a.text') ->orderBy('a.id', 'DESC') ->getQuery() ->getArrayResult(); return new Response(json_encode($res)); } } ?>

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

[{"title":"article 1","text":"abcde"},{"title":"article 2","text":"hello"}]

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

  • класс ServiceEntityRepository,
    который является базовым классом для репозиториев
  • метод find,
    который находит запись по первичному ключу
  • метод findBy,
    который находит записи по заданным критериям
  • метод matching,
    который находит записи по критериям с пагинацией
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить