1

Ich verwende stof/StofDoctrineExtensionsBundle (Bundle-Wrapper für), um eine Entität mit geschachtelten Mengen (Struktur) zu implementieren. Die Entität ist konfiguriert und funktioniert, aber ich kann nicht herausfinden, wie alle Stammnotizen mit allen ihren untergeordneten Elementen (vollständige Bäume) in einer einzigen Abfrage abgerufen werden. Ich habe derzeit die vollständige Sammlung zurück, aber es lädt alle Kinder, was bedeutet, dass eine große Anzahl von Abfragen durchgeführt wird.Doktrin 2 verschachtelte Menge - Abfrage der vollständigen Struktur in einer einzigen Abfrage

Danke für jede Hilfe.

Antwort

1

Eine Lösung gefunden.

  1. abrufen vollständige Liste der Knotenobjekte:

    $repo = $this->getDoctrine()->getManager()->getRepository('NestedEntity'); 
    $nodes = $repo->getChildren(); 
    
  2. bauen Baum mit Ihrem Knoten.

    $tree = $repo->getRepoUtils()->buildTreeArray($nodes); 
    
  3. buildTreeArray Methode akzeptiert Array von Knoten-Arrays, so müssen Sie Arrayaccess-Schnittstelle in Ihrer Entity implementieren. Außerdem werden alle untergeordneten Elemente in den Schlüssel __children von node-array geschrieben.

    /** 
    * @Gedmo\Tree(type="nested") 
    * @ORM\Table(name="nested_entity") 
    * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository") 
    */ 
    class NestedEntity implements \ArrayAccess 
    { 
    
        public function offsetExists($offset) 
        { 
         return property_exists($this, $offset); 
        } 
    
        public function &offsetGet($offset) 
        { 
         return $this->$offset; 
        } 
    
        public function offsetSet($offset, $value) 
        { 
         $this->$offset = $value; 
        } 
    
        public function offsetUnset($offset) 
        { 
         $this->$offset = null; 
        } 
    
        protected $__children = []; 
    
        ... 
    
0

Sie können mit nur childrenHierarchy() Methode für den ganzen Baum abrufen:

$tree = $repo->childrenHierarchy();