我正在尝试从gedmo nested-set扩展名 blog 复制示例,其中有许多父节点。在那里,您可以创建尽可能多的可移动父节点以及子节点(这是nested setWikipedia的典型节点)。
阅读评论部分,常见的建议是删除@Gedmo\TreeRoot annotation/mapping
,但是如果我这样做,我就能够移动根节点,但树会被打破特别是左右id。如果我保留TreeRoot
,并尝试移动根节点,我会得到“没有节点兄弟姐妹”或其他内容,如预期的那样。
查看扩展程序博客上的实际示例,您可以看到您可以创建没有父级的类别并将其上移或下移。
我的类别实体 - 相关部分:
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;
}
问题:如何创建多个根树(我想避免创建将是单根的假类别,并将其他所有内容添加为该节点的子节点),并且能够移动root节点上下?
P.S。我在主分公司。</ p>
答案 0 :(得分:1)
树将在并发更新时中断,请参阅tree locking文档。当树更新时,它会运行两个原子更新查询,而这些查询又可以从具有不同状态的并发请求运行,而这些状态不知道正在完成的任务。 当覆盖它时,树应该保持其稳定性,我已经成功地将此扩展用于100K-1M节点树,这是基于根目录。
如果您确定这些树制动器与并发性无关,请使用用例说明在github上打开一个问题。
答案 1 :(得分:0)
在我看来,创建假根类别的解决方案是最好的。那么你的真正根源将是这个假根的孩子。
要显示按名称排序的完整树,只需在假根节点上使用存储库功能重新排序。
答案 2 :(得分:-3)
您可以交换根节点的ID以重新排序它们。