Сортировка доктрины @OneToMany ArrayCollection

Мой вопрос близок к этому , но не подходит мне.

У меня этот столбец в сущности:

/** * @var ArrayCollection[SubjectTag] * * @ORM\OneToMany(targetEntity="SubjectTag", mappedBy="subject") * @Assert\Count(max = 10, maxMessage = "You can't create more than 10 tags.") * @Assert\Valid() */ protected $subjectTags; 

Я хочу динамически упорядочить мои теги по позиции, определенной в SubjectTag.position .

Related of "Сортировка доктрины @OneToMany ArrayCollection"

Попытайтесь использовать функциональность ORM ORITOR2 для ассоциаций Ordering To-Many следующим образом:

 /** * @var ArrayCollection[SubjectTag] * * @ORM\OneToMany(targetEntity="SubjectTag", mappedBy="subject") * @ORM\OrderBy({"position" = "ASC"}) * @Assert\Count(max = 10, maxMessage = "You can't create more than 10 tags.") * @Assert\Valid() */ protected $subjectTags; 

Надеюсь, что эта помощь

Я нашел решение, используя @HasLifeCycleCallbacks .

 use Doctrine\ORM\Mapping as ORM; /** * ... * @ORM\HasLifecycleCallbacks */ class Subject { /** * @var ArrayCollection[SubjectTag] * * @ORM\OneToMany(targetEntity="SubjectTag", mappedBy="subject") * @Assert\Count(max = 10, maxMessage = "You can't create more than 10 tags.") * @Assert\Valid() */ protected $subjectTags; /** * @ORM\PostLoad */ public function onPostLoad() { $tags = $this->subjectTags->toArray(); usort($tags, function($a, $b) { return $a->getPosition() == $b->getPosition() ? 0 : ($a->getPosition() > $b->getPosition() : -1 : 1); }); $this->subjectTags = new ArrayCollection($tags); } }