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:
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);
	}
 
}
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
 
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 }
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
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
Quand je vérifie ma table article tous les champs lft et rgt sont à 0!
Pour finir, ce code fonctionnait à un moment, mais plus maintenant, je ne comprends rien!