0

我有一个使用doctrine extension, tree behaviuor的实体,我在树中发现问题,不知道它是什么原因。为什么树无效?

我的实体:

MyEntity: 
    type: entity 
    gedmo: 
     tree: 
      type: nested 
    id: 
     id: 
      type: integer 
      generator: 
       strategy: AUTO 
    fields: 
#  ... 
     lft: 
      type: integer 
      gedmo: 
       - treeLeft 
     rgt: 
      type: integer 
      gedmo: 
       - treeRight 
     lvl: 
      type: integer 
      gedmo: 
       - treeLevel 
     root: 
      type: integer 
      gedmo: 
       - treeRoot 
     createdAt: 
      column: created_at 
      type: datetime 
      gedmo: 
       timestampable: 
        on: create 
     updatedAt: 
      column: updated_at 
      type: datetime 
      gedmo: 
       timestampable: 
        on: update 
    oneToMany: 
     children: 
      targetEntity: MyEntity 
      mappedBy: parent 
      orderBy: 
       lft: ASC 
    manyToOne: 
     parent: 
      targetEntity: MyEntity 
      inversedBy: children 
      joinColumn: 
       name: parent_id 
       referencedColumnName: id 
       onDelete: "restrict" 
      gedmo: 
       - treeParent 

树的问题:(通过验证报告()方法)

0 => "index [8], duplicate on tree root: 1" 
    1 => "index [9], duplicate on tree root: 1" 
    2 => "index [20], duplicate on tree root: 1" 
    3 => "index [21], duplicate on tree root: 1" 
    4 => "node [8], left is greater than right on tree root: 1" 
    5 => "node [10] left is less than parent`s [7] left value" 
    6 => "node [16] right is greater than parent`s [7] right value" 
    7 => "node [19] right is greater than parent`s [6] right value" 
    8 => "node [20] right is greater than parent`s [6] right value" 
    9 => "node [21] right is greater than parent`s [6] right value" 
    10 => "node [22] right is greater than parent`s [6] right value" 
    11 => "node [23] right is greater than parent`s [6] right value" 
    12 => "node [24] right is greater than parent`s [6] right value" 
    13 => "node [31] left is less than parent`s [30] left value" 
    14 => "node [35] left is less than parent`s [8] left value" 
    15 => "node [36] left is less than parent`s [8] left value" 

table data

+0

的的关键树的元素设置不正确。检查https://en.wikipedia.org/wiki/Nested_set_model以获得此层次模型的概念。 –

+0

@VadimAshikhman可以知道这个模型,我不知道为什么树有这个问题吗?,我不让用户删除一个有孩子的节点,并且用户只能将父节点改变为不是节点的子节点(低于lft或更大那rgt) – ghanbari

+0

很难说为什么树没有插入/更新/删除代码片段而被破坏。尝试在每次插入/更新/删除后插入少数节点(〜= 5)并执行'verify()'方法以找到问题方法。 –

回答

0

我发现了问题,当我通过$em->remove方法删除实体,学说延伸假设onDelete=cascade为实体&变更lft &树rgt值,那么对于实体(和所有儿童)的去除运行查询,但我的实体有onDelete=restrict,然后lft & rgt值被更新,但孩子们并没有被删除,并在树这引发错误