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

Метод setFirstResult

Метод setFirstResult класса QueryBuilder задаёт смещение, с которого начнётся выборка результатов запроса. Первым параметром передаётся целое число - количество записей, которые нужно пропустить перед началом выборки. Метод возвращает объект QueryBuilder, что позволяет строить цепочку вызовов.

Обычно метод используется совместно с setMaxResults для реализации постраничной навигации: setFirstResult задаёт номер страницы, а setMaxResults - количество записей на странице.

Синтаксис

$qb->setFirstResult(firstResult);

Пример

Давайте выберем статьи из таблицы, пропустив первые две записи:

<?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_list')] public function list(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select('a') ->from(Article::class, 'a') ->orderBy('a.id', 'ASC') ->setFirstResult(2); $res = $qb->getQuery()->getResult(); return new Response(count($res)); } } ?>

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

3

Пример

Давайте реализуем постраничную навигацию: пропустим первые пять записей и возьмём следующие пять:

<?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/page/{page}', name: 'article_page')] public function page(int $page, EntityManagerInterface $em): Response { $perPage = 5; $offset = ($page - 1) * $perPage; $qb = $em->createQueryBuilder(); $qb->select('a') ->from(Article::class, 'a') ->orderBy('a.id', 'ASC') ->setFirstResult($offset) ->setMaxResults($perPage); $res = $qb->getQuery()->getResult(); return new Response(count($res)); } } ?>

Результат выполнения кода для адреса /articles/page/2 при пятнадцати статьях:

5

Пример

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

<?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('/article/first', name: 'article_first')] public function first(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select('a') ->from(Article::class, 'a') ->orderBy('a.id', 'ASC') ->setFirstResult(0) ->setMaxResults(1); $res = $qb->getQuery()->getResult(); return new Response($res[0]->getTitle()); } } ?>

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

"article"

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

  • метод setMaxResults,
    который задаёт количество результатов выборки
  • класс QueryBuilder,
    который строит DQL-запросы
  • метод orderBy,
    который задаёт сортировку результатов
  • метод getQuery,
    который возвращает объект запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить