Bonjour à tous !
Je viens tout juste de commencer à réaliser l'annuaire d'une administration en utilisant le framework zend et j'aurais besoin d'un petit coup de pouce sur un point précis.
Voici mes différentes tables :
civilites (id_civilite, lib_civ_long, lib_civ_court)
grades (id_grade, lib_grade_long, lib_grade_court, categorie, code_grade)
villes (id_ville, nom_ville)
fonctions (id_fonction, lib_fonction)
echelons (id_echelon, lib_echelon, num_echelon)
agents (id_agent, nom, prenom, tel_agent, email_agent, #id_grade, #id_civilite, #id_echelon)
coordonnees (id_coord, info_coord, boite_postale, code_postal, #id_ville)
entites (id_entite, lib_entite_long, lib_entite_court, niveau, tel_entite, fax_entite, #id_responsable, #id_coord);
services (id_service, lib_service);
travail (#id_agent,#id_entite, #id_fonction, #id_service, lib_activite)
En résumé pour pouvoir afficher tous les éléments de mon annuaire je passe par la table "travail"
Cependant je souhaite pouvoir faire de multiple jointure en utilisant findParentRow ? est ce possible ?
Car dans ma table "travail" j'ai des entités qui font référence à une autre table font référence eux même à une autre table ... je sais pas si je me suis fait bien comprendre
Exemple dans le cas ou je voudrais afficher le libellé de la Civilité (ou du Grade) de mon agent !
En effet en utilisant findParentRow je peux donc récupèrer de la table Travail l'id_civilite (ou l'id_grade) référent à la table correspondant et comment donc faire pour a nouveau créer une jointure pour récupérer le libellé ?! et est ce la bonne solution à adopter en utilisant findParentRow ?
Pour le moment j'ai ceci :
fichier view/travail/index.html
fichier controllers/TravailController.php
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 <table id="myTable"> <thead> <tr> <th>Nom</th> <th>Prénom</th> <th>Fonction</th> <th>Structure</th> <th>Service</th> <th>Activité</th> </tr> </thead> <tbody> <?php foreach ($this->travail as $travail) : ?> <td><?php echo $this->escape($travail->getAgent()->nom) ?></span></td> <td><?php echo $this->escape($travail->getAgent()->prenom) ?></span></td> <td><?php echo $this->escape($travail->getFonction()->lib_fonction) ?></span></td> <td><?php echo $this->escape($travail->getEntite()->lib_entite_long) ?></span></td> <td><?php echo $this->escape($travail->getService()->lib_service) ?> </span></td> <td><?php echo $this->escape($travail->lib_activite) ?> </span></td> </tr> <?php endforeach ?> </tbody> </table>
fichier models/Travail.php
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 <?php require_once 'Travail.php'; class TravailController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { $t=new Travail(); $result=$t->fetchAll(); $this->view->travail=$result; $this->render(); } }
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 <?php class Travail extends Zend_Db_Table_Abstract { protected $_name = 'travail'; protected $_primary = array('id_agent','id_entite'); protected $_rowClass = 'TravailRow'; protected $_referenceMap = array( 'MonService' => array( 'columns' => array('id_service'), 'refTableClass' => 'Services', 'refColumns' => array('id_service') ), 'MonEntite' => array( 'columns' => array('id_entite'), 'refTableClass' => 'Entites', 'refColumns' => array('id_entite') ), 'MaFonction' => array( 'columns' => array('id_fonction'), 'refTableClass' => 'Fonctions', 'refColumns' => array('id_fonction') ), 'MonAgent' => array( 'columns' => array('id_agent'), 'refTableClass' => 'Agents', 'refColumns' => array('id_agent') ) ); }
fichier models/TravailRow.php
fichier models/Agents.php
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 <?php class TravailRow extends Zend_Db_Table_Row_Abstract { public function getAgent() { $ag = $this->findParentRow('Agents', 'MonAgent'); // les arguments de findParentRow : // 'Agents' -> c'est la table // 'MonAgent' -> c'est le rôle défini dans $_referenceMap de Travail.php return $ag; } public function getFonction() { $fonc = $this->findParentRow('Fonctions', 'MaFonction'); // les arguments de findParentRow : // 'Fonctions' -> c'est la table // 'MaFonction' -> c'est le rôle défini dans $_referenceMap de Travail.php return $fonc; } public function getEntite() { $ent = $this->findParentRow('Entites', 'MonEntite'); // les arguments de findParentRow : // 'Entites' -> c'est la table // 'MonEntite' -> c'est le rôle défini dans $_referenceMap de Travail.php return $ent; } public function getService() { $serv = $this->findParentRow('Services','MonService'); // les arguments de findParentRow : // 'Services' -> c'est la table // 'MonService' -> c'est le rôle défini dans $_referenceMap de Agents.php return $serv; } }
fichier models/AgentsRow.php
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 <?php class Agents extends Zend_Db_Table_Abstract { protected $_name = 'agents'; protected $_primary = 'id_agent'; protected $_rowClass = 'AgentsRow'; protected $_referenceMap = array( 'MaCivilite' => array( 'columns' => 'id_civilite', 'refTableClass' => 'Civilites', 'refColumns' => 'id_civ' ), 'MonGrade' => array( 'columns' => 'id_grade', 'refTableClass' => 'Grades', 'refColumns' => 'id_grade' )); }
fichier models/Civilites.php
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 <?php class AgentsRow extends Zend_Db_Table_Row_Abstract { public function getCiv() { $civ = $this->findParentRow('Civilites', 'MaCivilite'); // les arguments de findParentRow : // 'Civilites' -> c'est la table // 'MaCivilite' -> c'est le rôle défini dans $_referenceMap de Agents.php return $civ; } public function getGrade() { $grade = $this->findParentRow('Grades','MonGrade'); // les arguments de findParentRow : // 'Grades' -> c'est la table // 'MonGrade' -> c'est le rôle défini dans $_referenceMap de Agents.php return $grade; } }
fichier models/CivRow.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?php class Civilites extends Zend_Db_Table_Abstract { protected $_name = 'civilites'; protected $_primary = 'id_civ'; protected $_rowClass = 'CivRow'; }
et ainsi de suite pour les autres fichiers models/tables Grades Entites etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?php class CivRow extends Zend_Db_Table_Row_Abstract { }
Quelqu'un pour m'aider. Merci d'avance !
Partager