Метод getQuery
Метод getQuery класса Paginator возвращает объект Query, который содержит запрос для выборки элементов текущей страницы. После настройки Paginator этот метод позволяет получить готовый запрос и выполнить его через getResult. Это удобно, когда нужно дополнительно обработать запрос перед выполнением или использовать его в других частях приложения.
Синтаксис
public function getQuery(): Query
Пример
Давайте создадим пагинатор для сущности Article и получим запрос через метод getQuery:
<?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;
use Knp\Component\Pager\PaginatorInterface;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_list')]
public function list(EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
$qb = $em->createQueryBuilder()
->select('a')
->from(Article::class, 'a')
->orderBy('a.id', 'ASC');
$pagination = $paginator->paginate($qb, 1, 10);
$query = $pagination->getQuery();
$res = $query->getResult();
return new Response('Articles count: ' . count($res));
}
}
?>
Результат выполнения кода для 25 статей:
Articles count: 10
Пример
Давайте модифицируем запрос после получения через getQuery, добавив условие:
<?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;
use Knp\Component\Pager\PaginatorInterface;
class ArticleController extends AbstractController
{
#[Route('/articles/published', name: 'article_published')]
public function published(EntityManagerInterface $em, PaginatorInterface $paginator): Response
{
$qb = $em->createQueryBuilder()
->select('a')
->from(Article::class, 'a')
->orderBy('a.id', 'ASC');
$pagination = $paginator->paginate($qb, 2, 5);
$query = $pagination->getQuery();
$query->andWhere('a.boolean = :published')
->setParameter('published', true);
$res = $query->getResult();
return new Response('Published articles on page: ' . count($res));
}
}
?>
Результат выполнения кода для страницы 2:
Published articles on page: 5
Смотрите также
-
класс
Paginator,
который выполняет постраничную навигацию -
метод
getIterator,
который возвращает итератор для обхода элементов -
метод
count,
который возвращает количество элементов на странице -
метод
setUseOutputWalkers,
который управляет использованием output walkers