【问题标题】:Doctrine Extensions - Tree - Multiple roots学说扩展 - 树 - 多根
【发布时间】:2015-08-11 18:18:07
【问题描述】:

我们在 zf2 项目中大量使用树 doctrine extension - 带有一些大树数据结构。我们知道嵌套集中的插入和更新是昂贵的。我们还知道树插件使用“根”列来找出应该更新哪棵树。

昨天我又看了tree documentation,发现: “支持嵌套集中的多个根” 它是什么意思,它是如何工作的?我找不到此功能的任何文档。

我们希望我们可以定义一棵大树的较低分支的第二个根项,以便对这个较低分支的插入和更新不会影响整个树,而只会影响这个分支。有可能吗?

【问题讨论】:

    标签: doctrine-orm doctrine-extensions


    【解决方案1】:

    是的,有可能,树根分支将被 0 级节点分隔,请参阅mapping example of TreeRoot column 应该有所有映射类型的示例来映射 treeRoot 列。该列必须与 ID 属于同一类型,目前不支持 ManyToOne 关系,但有计划支持。

    root1
        child
    root2
        child
            child2
    

    当在 root2 或 root1 分支上更新或插入任何子时,它只会影响那个特定的分支。另请注意,树仍然不是并发安全的,您必须自己管理锁定,请参阅documentation reference here

    doc 目录包含此处提供的大部分信息。

    【讨论】:

    • 您所说的是我们已经在做的事情。在你的例子中,我想,“root1”的“孩子”和“root2”的“孩子”不是同一个实例,因为孩子只能有一个父母。我说的对吗?
    • 我的意思是如果一个孩子可以有多个根。因为我想到了这样的结构: - root1 -- child1 --- child3 -- child2 --- child4 在这种情况下,所有元素的“root”列的 ID 都是“root1”。在这里我认为“child2”应该是child4的“根”元素,因此在“child2”下方插入新子元素只会影响“child2”下方元素的“lft”和“rgt”列 - 和不是“root1”的所有元素——只是为了加快更新速度。你明白我的意思吗?
    • 好的,我误解了这个问题,不支持。猜测对您来说最好的选择是迁移到树存储的自定义策略,您应该根据自己的需要进行选择,如果不需要排序,则闭包树可能是一个不错的选择,尽管手动实现。
    猜你喜欢
    • 2012-06-24
    • 2012-02-15
    • 1970-01-01
    • 2013-04-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多