2013-03-20 80 views
0

在我的Symfony2應用程序我有四個實體,它們一起組成一個導航菜單:在Symfony2(doctrine2)中使用樹結構:如何設置順序?

{範疇,Level1Item,Level2Item,Level3Item}

通過「父」恩「孩子」,他們連接和層次結構的屬性形成。 在MySql-db中,這些表有一個名爲parent_id的字段(除了在根級別上的類別外)。 另外,還有一個屬性「order」(映射到db字段「order_id」)。

我通過實體管理器將類別提供給Twig模板。 如果存在,模板將遍歷level1,2和3中的項目。

所有項目的顯示順序與項目標識符一致。 但是,我想讓訂單屬性領先。

在大多數情況下,訂單會下降do {parent_id,order_id}。 因爲每個父母的子項可能有順序1,2,3,所以order_id本身不是唯一的。他們雖然在每個父母池中,但沒有兩個孩子的父母標識1爲order_id 2。

我知道如何在使用QueryBuilder時使用排序功能或在entityRepository中使用自定義函數時強制執行順序。但是,如何爲Twig將使用的 - > findAll()方法設置默認結果順序,向下鑽取到孩子......?

回答

0

你可以像這樣的實體映射批註指定的順序:

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

感謝托馬斯!我之前嘗試過,但後來我做錯了。我現在明白了,你只能輸入孩子的屬性來排序。我正在考慮sql-tables,考慮按{parent,order}排序,但這確實沒有意義,因爲你已經在父級別上了...... :) – 2013-03-20 14:31:27