Класс QueryBuilder
Класс QueryBuilder создаётся через метод createQueryBuilder
репозитория сущности и позволяет собирать DQL-запрос по частям:
выбирать поля, задавать таблицу, условия, сортировку, лимиты
и параметры. Каждый метод возвращает сам объект QueryBuilder,
поэтому вызовы можно выстраивать в цепочку. Готовый запрос
получают через метод getQuery.
Синтаксис
$qb = $repository->createQueryBuilder('alias');
Пример
Давайте создадим QueryBuilder и выберем все записи сущности Article:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(EntityManagerInterface $em): Response
{
$qb = $em->getRepository(Article::class)->createQueryBuilder('a');
$qb->select('a');
$res = $qb->getQuery()->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"5"
Пример
Давайте добавим условие на поле title и ограничим выборку:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles/filtered', name: 'article_filtered')]
public function filtered(EntityManagerInterface $em): Response
{
$qb = $em->getRepository(Article::class)->createQueryBuilder('a');
$qb->select('a')
->where('a.title = :title')
->setParameter('title', 'abcde')
->orderBy('a.id', 'DESC')
->setMaxResults(10);
$res = $qb->getQuery()->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"2"
Смотрите также
-
метод
select,
который задаёт выбираемые поля -
метод
where,
который задаёт условие выборки -
метод
setParameter,
который привязывает значение к параметру запроса -
метод
getQuery,
который возвращает готовый объект запроса