Сортировать учение @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,

5

Решение

Попробуйте использовать функциональность 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;

Надеюсь это поможет

5

Другие решения

Я нашел решение, используя @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);
}

}
2

По вопросам рекламы [email protected]