Bonjour,
Je me suis mis à utiliser le Zend Framework dans mes applications PHP afin d'avoir un code plus propre, plus efficace.
J'aimerai faire lier des tables entre-elles. Cette question revient assez souvent sur le forum, et la question est souvent la même : voir le tutoriel de Julien Pauli à ce sujet. Ce que j'ai fait. Cependant, il propose une solution qu'il juge lui même peu efficace au niveau des performances, puisqu'il n'y a pas de jointure au niveau des requêtes SQL, par conséquent, il faut plusieurs requêtes avant d'obtenir le résultat voulu.
Voici comment je faisais un chemin de fer avec Doctrine :
La classe Page, qui représente une page de mon site :
La classe qui construit le chemin de fer :
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 <?php /** * This class has been auto-generated by the Doctrine ORM Framework */ class Page extends Doctrine_Record { public function setTableDefinition() { $this->hasColumn('id', 'integer', 2, array('notnull' => true, 'primary' => true, 'autoincrement' => true, 'unsigned' => true)); $this->hasColumn('id_parent', 'integer', 2, array('notnull' => true, 'unsigned' => true)); $this->hasColumn('titre', 'string', 20, array('notnull' => true)); $this->hasColumn('lien', 'string', 50, array('notnull' => true)); } public function setUp() { $this->hasOne('Page as Parent', array('local' => 'id_parent', 'foreign' => 'id')); $this->hasMany('Page as Enfants', array('local' => 'id', 'foreign' => 'id_parent')); $this->index('id_parent', array('fields' => 'id_parent')); } }
Ma question est la suivante : est-il possible de faire quelque chose de semblable avec le ZF, sans faire une requête à chaque fois pour obtenir l'objet parent ?
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
38
39
40
41
42
43
44 <?php /** * * */ class Railroad { public static function getRailroad($db, $id) { $road = $db->getTable('Page')->find($id); if($road->exists()) { $railroad = "Vous êtes ici "; if(Railroad::hasParent($road)) { $railroad .= Railroad::makeParentRoad($road->Parent); } $railroad .= " => ". '<a href="'. $road->lien .'" title="'. $road->titre .'">'. $road->titre ."</a>"; return $railroad; } return "Erreur lors de la formation du 'chemin de fer' !"; } public static function makeParentRoad($parentroad) { if(Railroad::hasParent($parentroad)) { return Railroad::makeParentRoad($parentroad->Parent). ' => <a href="'. $parentroad->lien .'" title="'. $parentroad->titre .'">'. $parentroad->titre ."</a>"; }else { return ' => <a href="'. $parentroad->lien .'" title="'. $parentroad->titre .'">'. $parentroad->titre ."</a>"; } return ""; } public static function hasParent($road) { return $road->Parent->id != 0; } } ?>
Partager