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

Метод setUseOutputWalkers

Метод setUseOutputWalkers класса Paginator включает или отключает использование output walkers при построении пагинации. Первым параметром передаётся булево значение: true включает walkers, false выключает. По умолчанию использование walkers включено.

Output walkers - это специальные обходчики DQL-запроса, которые Doctrine применяет для корректного подсчёта общего количества записей и выборки данных в сложных запросах с JOIN и GROUP BY. Если запрос простой, walkers можно отключить для повышения производительности.

Синтаксис

public function setUseOutputWalkers(?bool $useOutputWalkers): void

Пример

Давайте создадим пагинатор и отключим использование output walkers для простого запроса:

<?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 Doctrine\ORM\Tools\Pagination\Paginator; class ArticleController extends AbstractController { #[Route('/articles', name: 'article_list')] public function list(EntityManagerInterface $em): Response { $query = $em->createQuery( 'SELECT a FROM App\Entity\Article a ORDER BY a.id ASC' ); $paginator = new Paginator($query); $paginator->setUseOutputWalkers(false); return new Response('total: ' . count($paginator)); } } ?>

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

"total: 5"

Пример

Давайте включим output walkers для запроса с GROUP BY, где корректный подсчёт требует обхода:

<?php namespace App\Controller; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Doctrine\ORM\Tools\Pagination\Paginator; class ArticleController extends AbstractController { #[Route('/stats', name: 'article_stats')] public function stats(EntityManagerInterface $em): Response { $query = $em->createQuery( 'SELECT a.status, COUNT(a.id) AS cnt FROM App\Entity\Article a GROUP BY a.status' ); $paginator = new Paginator($query); $paginator->setUseOutputWalkers(true); return new Response('total: ' . count($paginator)); } } ?>

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

"total: 3"

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

  • класс Paginator,
    который выполняет постраничную разбивку выборки
  • метод setFetchJoinCollection,
    который включает fetch join при пагинации
  • метод getIterator,
    который возвращает итератор по результатам
  • метод count,
    который возвращает общее число записей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить