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

Атрибут OrderBy

Атрибут OrderBy вешается на свойство сущности, которое хранит коллекцию связанных объектов. Он задаёт порядок, в котором Doctrine будет возвращать связанные записи при выборке. Первым параметром передаётся массив, где ключ - имя поля связанной сущности, а значение - направление сортировки: 'ASC' или 'DESC'.

Синтаксис

#[OrderBy(['field' => 'ASC'])]

Пример

Давайте создадим сущность Article со связью OneToMany на сущность Comment и отсортируем комментарии по полю createdAt по убыванию:

<?php namespace AppEntity; use AppRepositoryArticleRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ArticleRepository::class)] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn] private ?int $id = null; #[ORMColumn(length: 255)] private ?string $title = null; #[ORMOneToMany(mappedBy: 'article', targetEntity: Comment::class)] #[ORMOrderBy(['createdAt' => 'DESC'])] private Collection $comments; public function getId(): ?int { return $this->id; } public function getTitle(): ?string { return $this->title; } public function setTitle(string $title): static { $this->title = $title; return $this; } public function getComments(): Collection { return $this->comments; } } ?>

Теперь при обращении к коллекции comments Doctrine автоматически отсортирует комментарии по дате создания от новых к старым.

Пример

Давайте зададим сортировку сразу по двум полям: сначала по createdAt по убыванию, затем по text по возрастанию:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn] private ?int $id = null; #[ORMOneToMany(mappedBy: 'article', targetEntity: Comment::class)] #[ORMOrderBy(['createdAt' => 'DESC', 'text' => 'ASC'])] private Collection $comments; public function getComments(): Collection { return $this->comments; } } ?>

Порядок ключей в массиве определяет приоритет сортировки: первое поле - главное, второе - дополнительное.

Пример

Давайте выведем отсортированные комментарии в контроллере:

<?php namespace AppController; use AppEntityArticle; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function show(ArticleRepository $articleRepository): Response { $article = $articleRepository->find(1); $res = []; foreach ($article->getComments() as $comment) { $res[] = $comment->getText(); } return new Response(implode(', ', $res)); } } ?>

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

"article 3, article 2, article 1"

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

  • атрибут OneToMany,
    который создаёт связь один-ко-многим
  • атрибут ManyToOne,
    который создаёт связь многие-к-одному
  • параметр mappedBy,
    который указывает владеющую сторону связи
  • параметр fetch,
    который задаёт стратегию загрузки связанных записей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить