Doctrine orm 条令扩展-树-多根

Doctrine orm 条令扩展-树-多根,doctrine-orm,doctrine-extensions,Doctrine Orm,Doctrine Extensions,在我们的zf2项目中,我们大量使用了树,并使用了一些大树数据结构。我们知道嵌套集中的插入和更新是昂贵的。我们还知道树插件使用“根”列来确定应该更新哪个树 昨天我又看了一遍,发现: “支持嵌套集中的多个根” 它是什么意思?它是如何工作的?我找不到此功能的任何文档 我们希望能够定义一棵大树下一个分支的第二个根项目,这样插入和更新到这个下一个分支不会影响整个树,而只会影响这个分支。有可能吗?有可能,树根分支将由级别0节点分隔,请参阅所有映射类型都有示例来映射treeRoot列。列的类型必须与ID的类型

在我们的zf2项目中,我们大量使用了树,并使用了一些大树数据结构。我们知道嵌套集中的插入和更新是昂贵的。我们还知道树插件使用“根”列来确定应该更新哪个树

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


我们希望能够定义一棵大树下一个分支的第二个根项目,这样插入和更新到这个下一个分支不会影响整个树,而只会影响这个分支。有可能吗?

有可能,树根分支将由级别0节点分隔,请参阅所有映射类型都有示例来映射treeRoot列。列的类型必须与ID的类型相同,它目前不支持manytone关系,但有一天会支持它

root1
    child
root2
    child
        child2
在root2或root1分支上更新或插入任何子级时,它将只影响该分支。还要注意,树仍然不是并发安全的,您必须自己管理锁定,请参阅


doc目录包含此处给出的大部分信息。

您所说的就是我们已经做过的。在您的示例中,我假设“root1”的“child”和“root2”的“child”不是同一个实例,因为在child上只能有一个父对象。我说的对吗?我的意思是如果一个孩子可以有多个根。因为我想到了这样一种结构:-root1--child1--child3--child2--child4在本例中,所有元素的“root”列的ID都是“root1”。在这里,我认为“child2”应该是child4的“根”元素,因此在“child2”下面插入一个新的子元素只会影响“child2”下面元素的“lft”和“rgt”列,而不是“root1”的所有元素,只是为了加快更新。你明白我的意思吗?好吧,我误解了这个问题,那是不被支持的。我猜您最好的选择是迁移到树存储的自定义策略,您应该根据需要选择该策略,如果不需要排序,那么闭包树可能是一个不错的选择,尽管它是手动实现的。