php - 移动 "root"或父节点 - Doctrine NestedSet 扩展

标签 php mysql doctrine symfony nested-sets

我正在尝试从 gedmo nested-set 复制示例分机 blog ,这里有很多父节点。在那里您可以创建尽可能多的可移动父节点和子节点(这对于 nested set­Wikipedia 是典型的)。

通过评论部分阅读,常见的建议是删除 @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/

相关文章:

php - 需要 XML 解析器错误开始标记

php - 调用父类(super class)中声明的函数时引用子类对象

php - 如何创建新闻源(AJAX 新闻源)

mysql - 是否可以使用 Hibernate 检测数据库中未使用的列?

php - 判断一个实体是否存在于 Doctrine 2 中的最有效方法

php - Doctrine 2.1 - 实体插入

php - Symfony 2 从实体管理器获取实体的原始数据

mysql - 具有 TIME 数据类型的 MySQL INSERT 语句中的语法错误

mysql - 返回 MySQL 中 MAX 函数的相应列

Symfony2 登录 - 凭据错误 | Doctrine 不接收任何参数