我正在尝试从 gedmo nested-set 复制示例分机 blog ,这里有很多父节点。在那里您可以创建尽可能多的可移动父节点和子节点(这对于 nested setWikipedia 是典型的)。
通过评论部分阅读,常见的建议是删除 @Gedmo\TreeRoot 注释/映射
,但如果我这样做,我可以移动根节点,但树会变得 splinter ,特别是左右身份证。如果我保留 TreeRoot
,并尝试移动根节点,我会得到“没有节点 sibling ”或类似预期的结果。
查看扩展博客中的实例,您可以看到您可以创建没有父级的类别并将其向上或向下移动。
我的类别实体 - 相关部分:
class Category
{
/**
* @Gedmo\TreeLeft
* @ORM\Column(name="lft", type="integer")
*/
private $lft;
/**
* @Gedmo\TreeLevel
* @ORM\Column(name="lvl", type="integer")
*/
private $lvl;
/**
* @Gedmo\TreeRight
* @ORM\Column(name="rgt", type="integer")
*/
private $rgt;
/**
* @Gedmo\TreeRoot
* @ORM\Column(name="root", type="integer", nullable=true)
*/
private $root;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
* @ORM\OrderBy({"lft" = "ASC"})
* @Exclude
*/
private $children;
}
问题:如何制作多根树(我想避免创建将成为单根的虚假类别,并将其他所有内容添加为该节点的子节点),并能够移动根节点向上和向下?
附言我在主分支上。
最佳答案
树将在并发更新时中断,请参阅 tree locking文档。当树更新时,它会运行两个原子更新查询,而这两个更新查询又可以从具有不同状态的并发请求运行,不知道正在完成的状态。 当覆盖这个时,一棵树应该保持其稳定性,我已经成功地将这个扩展用于 100K - 1M 节点树,虽然它是基于根的。
如果您确定这些树制动与并发无关,请在 github 上提出问题带有用例描述。
关于php - 移动 "root"或父节点 - Doctrine NestedSet 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8769759/