Мой вопрос близок к этому , но не подходит мне.
У меня этот столбец в сущности:
/** * @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
.
Попытайтесь использовать функциональность 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); } }