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

Метод orderBy

Метод orderBy класса QueryBuilder задаёт сортировку результатов DQL-запроса. Первым параметром передаётся имя поля сущности, по которому нужно отсортировать выборку, а вторым - направление сортировки: 'ASC' или 'DESC'. Метод полностью заменяет ранее установленную сортировку, а не добавляет новую. Если нужно добавить ещё одно поле к уже заданной сортировке, используйте метод addOrderBy.

Синтаксис

$qb->orderBy(field, direction);

Пример

Давайте отсортируем статьи по полю title по возрастанию:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function findAllOrderedByTitle(): array { return $this->createQueryBuilder('a') ->orderBy('a.title', 'ASC') ->getQuery() ->getResult(); } } ?>

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

[ ['id' => 2, 'title' => 'article 1'], ['id' => 1, 'title' => 'article 2'], ['id' => 3, 'title' => 'article 3'], ]

Пример

Давайте отсортируем статьи по полю createdAt по убыванию, чтобы новые статьи шли первыми:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function findAllNewestFirst(): array { return $this->createQueryBuilder('a') ->orderBy('a.createdAt', 'DESC') ->getQuery() ->getResult(); } } ?>

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

[ ['id' => 3, 'title' => 'article 3', 'createdAt' => '2024-03-01'], ['id' => 1, 'title' => 'article 2', 'createdAt' => '2024-02-01'], ['id' => 2, 'title' => 'article 1', 'createdAt' => '2024-01-01'], ]

Пример

Метод orderBy заменяет ранее установленную сортировку. Если вызвать его дважды, применится только последний вызов:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function demoReplaceOrder(): array { return $this->createQueryBuilder('a') ->orderBy('a.title', 'ASC') ->orderBy('a.createdAt', 'DESC') ->getQuery() ->getResult(); } } ?>

В итоговом DQL останется только сортировка по createdAt:

"SELECT a FROM App\Entity\Article a ORDER BY a.createdAt DESC"

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

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