2013-03-20 2 views
0

В моем Symfony2 приложение У меня есть четыре сущности, которые вместе составляют меню нав:Использование древовидной структуры в Symfony2 (doctrine2): как установить порядок?

{Категория, Level1Item, Level2Item, Level3Item}

Через «родитель» эн «детей» свойств они связаны и иерархия формируется. В MySql-db в таблицах есть поле с именем parent_id (за исключением категорий, поскольку они находятся на корневом уровне). Кроме того, есть свойство «order» (отображается в поле db «order_id»).

Я передаю категории через диспетчер объектов в шаблон Twig. Шаблон итерации по элементам уровня 1, 2 и 3, если они существуют.

Порядок отображения всех элементов соответствует идентификатору элемента. Тем не менее, я хотел бы сделать свойство order-property leading.

В большинстве случаев порядок будет снижаться: {parent_id, order_id}. Поскольку дочерние элементы для каждого родителя могут иметь порядок 1, 2, 3, сами order_id не являются уникальными. Они, хотя в пределах каждого родительского пула, не имеют двух детей с order_id 2 для parent_id 1, например.

Я знаю, как заставить заказ использовать функции сортировки при использовании QueryBuilder или при использовании пользовательской функции в entityRepository. Но как установить порядок результатов по умолчанию для метода -> findAll(), с которым Twig будет работать, сверля до детей ...?

ответ

0

Вы можете указать порядок, в сущности отображения аннотаций, как это:

/** 
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent") 
* @ORM\OrderBy({"name" = "ASC"}) 
*/ 
private $children; 
+0

Спасибо Tomas! Я пробовал это раньше, но потом я сделал это неправильно. Теперь я понимаю, что вы только вводите свойства детей для заказа. Я думал о sql-таблицах, думая о заказе {parent, order}, но это действительно не имеет никакого смысла, поскольку вы уже на родительском уровне ... :) –

Смежные вопросы