在我的Symfony2应用程序中,我有四个实体共同创建一个导航菜单:
{Category,Level1Item,Level2Item,Level3Item}
通过“parent”en“children”属性,它们相互连接并形成层次结构。 在MySql-db中,表有一个名为parent_id的字段(除了类别,因为它们位于根级别)。 此外,还有一个属性“order”(映射到db-field“order_id”)。
我通过实体管理器将类别提供给Twig模板。 如果存在,模板将迭代level1,2和3中的项目。
显示所有项目的顺序与项目ID一致。 但是,我想使订单属性领先。
在大多数情况下,订单会降低:{parent_id,order_id}。 因为每个父项的子项可以具有1,2,3的顺序,所以order_id本身不是唯一的。虽然它们位于每个父池中,但没有两个子节点,例如,parent_id 1为order_id 2。
我知道在使用QueryBuilder时,或者在entityRepository中使用自定义函数时,如何使用排序功能强制执行命令。但是如何设置Twig将使用的 - > findAll()方法的默认结果顺序,向下钻取到子项......?
答案 0 :(得分:0)
您可以在实体映射注释中指定顺序,如下所示:
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
* @ORM\OrderBy({"name" = "ASC"})
*/
private $children;