Подтвердить что ты не робот

Как отсортировать массив arrayCollection в symfony2

У меня есть сущность "контейнер" с этим свойством

/**
 * @ORM\OneToMany(targetEntity="BizTV\ContentManagementBundle\Entity\Content", mappedBy="container")
 */
private $content;

свойство представляет собой массив...

public function __construct() {
    $this->content = new \Doctrine\Common\Collections\ArrayCollection();
}

... с этими двумя стандартными методами

/**
 * Add content
 *
 * @param BizTV\ContentManagementBundle\Entity\Content $content
 */
public function addContent(\BizTV\ContentManagementBundle\Entity\Content $content)
{
    $this->content[] = $content;
}

/**
 * Get content
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getContent()
{
    return $this->content;
}

Теперь мой вопрос: есть ли гладкий способ создания функции сортировки в этом, возможно, на вызове getContent()? Я не php wiz и, конечно, не приправлен в symfony2, но я узнаю, как я иду.

Сам объект контента имеет сортировку INT, подобную этой, которую я хочу отсортировать по ней:

/**
 * @var integer $sortOrder
 *
 * @ORM\Column(name="sort_order", type="integer")
 */
private $sortOrder; 
4b9b3361

Ответ 1

Вы должны иметь возможность использовать оператор @ORM\OrderBy, который позволяет вам указывать столбцы для упорядочивания коллекций на:

/**
 * @ORM\OneToMany(targetEntity="BizTV\ContentManagementBundle\Entity\Content", mappedBy="container")
 * @ORM\OrderBy({"sort_order" = "ASC"})
 */
private $content;

На самом деле это может быть дубликат Как сделать заказ на OneToMany/ManyToOne

Изменить

Проверка рекомендаций по внедрению показывает, что вы должны получить таблицы с запросом объединения в коллекцию, чтобы аннотация @ORM\OrderBy работала: < а2 >

Это означает, что вы должны написать метод в репозитории, чтобы вернуть контейнер с объединенной таблицей содержимого.

Ответ 2

Если вы хотите быть уверенным, что вы всегда получаете свои отношения в порядке, основанном на текущих значениях свойств, вы можете сделать что-то вроде этого:

$sort = Criteria::create();
$sort->orderBy(Array(
    'Order' => Criteria::ASC
));
return $this->yourCollectionProperty->matching($sort);

Используйте это, например, если вы изменили свойство Order. Отлично подходит для "последней измененной даты", -).

Ответ 3

Вы можете написать

@ORM\OrderBy({"date" = "ASC", "time" = "ASC"})

для множественного упорядочения критериев.