2012-01-07 14 views
5

estoy tratando de replicar ejemplo de gedmo nested-set extensión blog, donde hay muchos nodos padre. Allí puede crear tantos nodos padres móviles como hijos (lo que es típico para un nested set­Wikipedia).Moving nodos "raíz" o de padres - Doctrina NestedSet extensión

Lectura a través de la sección de comentarios, el consejo común es eliminar @Gedmo\TreeRoot annotation/mapping, pero si hago eso, puedo mover nodos de raíz, pero el árbol se rompe particularmente los identificadores izquierdo y derecho. Si guardo TreeRoot, y trato de mover los nodos raíz, obtengo "no node brothers" o algo parecido, como era de esperar.

Mirando ejemplo vivo en el blog de la extensión se puede ver que usted es capaz de crear la categoría sin padres y moverlo hacia arriba o hacia abajo.

Mi categoría de entidades - partes pertinentes:

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; 
} 

Pregunta: Cómo hacer que el árbol de raíz múltiple (me gustaría evitar la creación de la categoría falso que será única raíz, y añadir todo lo demás como niño de ese nodo), y ser capaz de mover nodos raíz arriba y abajo?

P.S. Estoy en la rama principal.

+0

¿Encontró una solución para esto? – lopsided

+0

@lopsided Al final he hecho lo que quería evitar. Agregando la categoría raíz del árbol "falso" y todos los otros nodos raíz como secundarios del falso. Funciona, aunque hay algunas desventajas, ocultando la categoría falsa cuando se muestran categorías (en mi caso) en formularios o cuando se renderizan dentro de la lista desordenada, etc. –

+0

Eso es lo que he ido ahora también. Funciona bien para mí, pero sigo rompiendo el árbol, no estoy seguro de que sea totalmente robusto. – lopsided

Respuesta

-2

Puede cambiar los identificadores de los nodos raíz para reordenarlos.

1

El árbol se interrumpirá en las actualizaciones concurrentes, consulte tree locking documentación. Cuando las actualizaciones de árbol ejecutan dos consultas de actualización atómica, que a su vez se pueden ejecutar desde una solicitud simultánea con un estado diferente sin darse cuenta de los que se están realizando. Al tener esto cubierto, un árbol debe mantener su estabilidad, he utilizado con éxito esta extensión para 100K - 1M árbol de nodos, que se basó en las raíces sin embargo.

Si está seguro de que estos árboles de frenos no están relacionados con la simultaneidad, abra un problema en github con una descripción de caso de uso.

0

Su solución para crear una categoría de raíz falsa es la mejor en mi punto de vista. Entonces tus verdaderas raíces serán los hijos de esta raíz falsa.

para mostrar el árbol completa ordenada por nombre, sólo tiene que utilizar la función de reordenación repositorio en su nodo raíz falsa.

Cuestiones relacionadas