【问题标题】:Using a tree structure in Symfony2 (doctrine2): how to set the order?在 Symfony2 (doctrine2) 中使用树结构:如何设置顺序?
【发布时间】:2013-03-20 10:05:51
【问题描述】:

在我的 Symfony2 应用程序中,我有四个实体共同组成一个导航菜单:

{ 类别, Level1Item, Level2Item, Level3Item }

通过“父”和“子”属性将它们连接起来并形成层次结构。 在 MySql-db 中,表有一个名为 parent_id 的字段(类别除外,因为它们位于根级别)。 此外,还有一个属性“order”(映射到db-field“order_id”)。

我通过实体管理器将类别提供给 Twig 模板。 如果存在,模板会遍历级别 1、2 和 3 中的项目。

所有项目的显示顺序与项目 ID 一致。 但是,我想让 order-property 领先。

在大多数情况下,订单会下降:{ parent_id, order_id }。 因为每个父项的子项可能具有顺序 1、2、3,所以 order_id 本身不是唯一的。它们虽然在每个父池中,但没有两个子节点的 order_id 为 2,例如 parent_id 为 1。

我知道在使用 QueryBuilder 或在 entityRepository 中使用自定义函数时如何使用排序功能强制排序。但是如何为 Twig 将使用的 ->findAll() 方法设置默认结果顺序,向下钻取到子项...?

【问题讨论】:

    标签: symfony doctrine-orm twig


    【解决方案1】:

    您可以像这样在实体映射注释中指定顺序:

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

    【讨论】:

    • 谢谢托马斯!我以前试过这个,但后来我做错了。我现在明白了,您只能输入要订购的孩子的属性。我在考虑 sql-tables,考虑按 { parent, order } 排序,但这确实没有意义,因为您已经处于父级... :)
    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2013-12-27
    • 2013-04-06
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多