surcharger la méthode save() de la classe du modèle
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:
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:
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:
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!