как сортировать arrayCollection сущности в symfony2

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

/**
 * @ORMOneToMany(targetEntity="BizTVContentManagementBundleEntityContent", mappedBy="container")
 */
private $content;

свойство-это коллекция массив...

public function __construct() {
    $this->content = new DoctrineCommonCollectionsArrayCollection();
}

...с помощью этих двух стандартных методов

/**
 * Add content
 *
 * @param BizTVContentManagementBundleEntityContent $content
 */
public function addContent(BizTVContentManagementBundleEntityContent $content)
{
    $this->content[] = $content;
}

/**
 * Get content
 *
 * @return DoctrineCommonCollectionsCollection 
 */
public function getContent()
{
    return $this->content;
}

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

сам объект контента имеет сортировку INT, как это, что я хочу отсортировать его on:

/**
 * @var integer $sortOrder
 *
 * @ORMColumn(name="sort_order", type="integer")
 */
private $sortOrder; 

3 ответов


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

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

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

редактировать

проверка рекомендаций по реализации похоже, что вы должны получить таблицы с запросом соединения в коллекцию, чтобы аннотация @ORM\OrderBy работала: http://www.krueckeberg.org/notes/d2.html

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


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

$sort = new Criteria(null, ['Order' => Criteria::ASC]);
return $this->yourCollectionProperty->matching($sort);

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


можно писать

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

для заказа нескольких критериев.