在Symfony2(doctrine2)中使用树结构:如何设置顺序?

问题描述:

在我的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()方法设置默认结果顺序,向下钻取到孩子......?

你可以像这样的实体映射批注指定的顺序:

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

感谢托马斯!我之前尝试过,但后来我做错了。我现在明白了,你只能输入孩子的属性来排序。我正在考虑sql-tables,考虑按{parent,order}排序,但这确实没有意义,因为你已经在父级别上了...... :) – 2013-03-20 14:31:27