Метод addOrderBy
Метод addOrderBy класса QueryBuilder
добавляет новую сортировку к запросу,
не удаляя ранее установленные через
orderBy или addOrderBy.
Первым параметром передаётся поле или
выражение для сортировки, вторым -
направление: 'ASC' или 'DESC'.
Метод возвращает тот же объект
QueryBuilder, поэтому вызовы можно
выстраивать в цепочку.
Синтаксис
addOrderBy(sort, order)
Пример
Давайте добавим сортировку по полю id по возрастанию:
<?php
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Article;
class ArticleRepository
{
public function findByOrder(EntityManagerInterface $em): array
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->addOrderBy('a.id', 'ASC');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
[Article, Article, Article]
Пример
Давайте добавим две сортировки: сначала по
полю title, затем по полю id:
<?php
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Article;
class ArticleRepository
{
public function findByOrder(EntityManagerInterface $em): array
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->addOrderBy('a.title', 'ASC')
->addOrderBy('a.id', 'DESC');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
[Article, Article, Article]
Пример
Давайте сравним поведение orderBy и
addOrderBy. Метод orderBy
перезаписывает сортировку, а addOrderBy -
добавляет:
<?php
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Article;
class ArticleRepository
{
public function findByOrder(EntityManagerInterface $em): array
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->orderBy('a.id', 'ASC')
->addOrderBy('a.title', 'DESC');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
[Article, Article, Article]
Смотрите также
-
метод
orderBy,
который задаёт сортировку запроса -
метод
groupBy,
который группирует результаты запроса -
метод
setMaxResults,
который ограничивает число результатов -
класс
QueryBuilder,
который строит DQL-запросы