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