Bonjour,
J'ai tout essayé, j'en peux plus:
_j'ai une table rubrique créée avec Nestedset (avec colonnes "lft" et "rgt").
_une table article sur laquelle j'ai rajouté les colonnes "lft" et "rgt".
Lors de la création d'un article, je veux initialiser les colonnes article.lft et articles.rgt avec la valeur des colonnes rubrique.lft et rubrique.rgt grâce à la méthode save() de la classe Article.
Voila ma classe Article ainsi que les fichiers nécessaires à votre compréhension:
Schema.yml:
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 class Article extends BaseArticle { public function save(Doctrine_Connection $conn = null) { if ($this->isNew()) { if (!$this->getLft()) { $nom = Doctrine_Core::getTable('Rubrique') ->createQuery('r') ->select('r.lft') ->where('r.id = ?', $this->getIdRubrique) ->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR); $lft = Doctrine_Inflector::urlize($nom); $this->setLft($lft); } if (!$this->getRgt()) { $nom = Doctrine_Core::getTable('Rubrique') ->createQuery('r') ->select('r.rgt') ->where('r.id = ?', $this->getIdRubrique()) ->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR); $rgt = Doctrine_Inflector::urlize($nom); $this->setRgt($rgt); } } return parent::save($conn); } }
Jeux fixtures:
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 Rubrique: actAs: Timestampable: ~ NestedSet: hasManyRoots: true rootColumnName: root_id columns: nom: { type: string(255), notnull: true} Article: actAs: { Timestampable: ~ } columns: id_rubrique: { type: integer, notnull: true } designation: { type: string(80), notnull: true } description: { type: string(4000), notnull: true } lft: { type: integer, notnull: true } rgt: { type: integer, notnull: true } relations: Rubrique: { onDelete: CASCADE, local: id_rubrique, foreign: id, foreignAlias: Rubrique1 }
Quand je vérifie ma table article tous les champs lft et rgt sont à 0!
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Rubrique: arbre: nom: Arbre children: collections_et_collectors: nom: Collections et Collectors dvd_vhs_et_cinema: nom: DVD, VHS et Cinéma informatique_et_pda: nom: Informatique et PDA children: pc_de_bureau: nom: PC de Bureau pc_portables: nom: PC Portables pda: nom: PDA Article: pc_gamer: Rubrique: pc_de_bureau designation: PC HP Pentium 233 description: | PC HP Pentium 233 PC Hewlett Packard P233 MMX RAM 64Mb, DD 2Gb, disquette, lecteur CD Windows 98, office. Vendu avec écran, clavier, souris. ipod: Rubrique: pda designation: nokia description: | super portable
Pour finir, ce code fonctionnait à un moment, mais plus maintenant, je ne comprends rien!
Partager