findParentRow et Jointures
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 :oops:
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
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
|
<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 controllers/TravailController.php
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
|
<?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();
}
} |
fichier models/Travail.php
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
|
<?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
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 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/Agents.php
Code:
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/AgentsRow.php
Code:
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/Civilites.php
Code:
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';
} |
fichier models/CivRow.php
Code:
1 2 3 4 5 6 7 8
|
<?php
class CivRow extends Zend_Db_Table_Row_Abstract {
} |
et ainsi de suite pour les autres fichiers models/tables Grades Entites etc...
Quelqu'un pour m'aider. Merci d'avance !