Bonjour,

J'ai besoin, pour stocker des opérations, d'utiliser le behavior Doctrine : NestedSet. Mais je rencontre deux problèmes.

Le premier, est la méthodologie pour stocker des objets et enregistrer leurs relations hiérarchiques. J'ai beau utiliser des :
  • insertAsLastChildOf
  • insertNextSiblingOf
  • etc.

je n'obtiens jamais quelque chose de très correct. Par exemple, pour stocker l'opération : 3 * (1 + 2), il faut que je déclare les éléments à l'envers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
    /**
     * Sets the hierarchy for 3*(1+2):
     *  - *
     *  - - 3
     *  - - +
     *  - - - 1
     *  - - - 2
     *  
     *  @return nothing
     */
    function setConstraintHierarchy()
    {
        Doctrine_Core::getTable('PocConstraint')->getTree()->createRoot($this->mult);
        $this->plus->getNode()->insertAsLastChildOf($this->mult);
        $this->operand_2->getNode()->insertAsLastChildOf($this->plus);
        $this->operand_1->getNode()->insertAsLastChildOf($this->plus);
        $this->operand_3->getNode()->insertAsLastChildOf($this->mult);
 
    }
alors que je souhaiterais plutôt faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
    function setConstraintHierarchy()
    {
        Doctrine_Core::getTable('PocConstraint')->getTree()->createRoot($this->mult);
        $this->operand_3->getNode()->insertAsLastChildOf($this->mult);
        $this->plus->getNode()->insertAsLastChildOf($this->mult);
        $this->operand_1->getNode()->insertAsLastChildOf($this->plus);
        $this->operand_2->getNode()->insertAsLastChildOf($this->plus);
    }

L'autre problème me vient de l'utilisation de la méthode getChildren. Dans mon cas d'utilisation, je veux récupérer l'ensemble des enfants d'un noeud et afficher leur valeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
    public function __toString()
    {
        $value = $this->getValue();
 
        if ($children = $this->getNode()->getChildren()) {
            foreach ($children as $constraint) {
                $value .= $constraint->__toString();
            }
        }
 
        return $value;
    }
Or, ce code ne marche pas en l'état, avec l'initialisation précédente, mais marche si j'ajoute :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
    function setConstraintHierarchy()
    {
        Doctrine_Core::getTable('PocConstraint')->getTree()->createRoot($this->mult);
        $this->plus->getNode()->insertAsLastChildOf($this->mult);
        $this->operand_2->getNode()->insertAsLastChildOf($this->plus);
        $this->operand_1->getNode()->insertAsLastChildOf($this->plus);
        $this->operand_3->getNode()->insertAsLastChildOf($this->mult);
        
        $treeObject = Doctrine_Core::getTable('PocConstraint')->getTree();
        $tree = $treeObject->fetchTree();
    }
Je ne comprends pas du tout l'utilité d'ajouter le fetchTree à un objet que je n'utilise même pas ...

Si quelqu'un avait des idées, merci !!