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 :
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
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); }
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 :
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
12
13 public function __toString() { $value = $this->getValue(); if ($children = $this->getNode()->getChildren()) { foreach ($children as $constraint) { $value .= $constraint->__toString(); } } return $value; }
Je ne comprends pas du tout l'utilité d'ajouter le fetchTree à un objet que je n'utilise même pas ...
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(); }
Si quelqu'un avait des idées, merci !!
Partager