Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 22h07   #1
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 77
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 77
Points : 26
Points : 26
Par défaut 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

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 !
KiMbOoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 17h22   #2
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 77
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 77
Points : 26
Points : 26
au final j'utilise Zend_Db_Select ainsi que les méthodes join joinleft etc .. au lieu de passer par findParentRow surtout que je remarque qu'en utilisant cette méthode j'ai un temps de chargement de la page qui est énorme (genre 10sec) pour afficher le résultat est-ce normale ?
Peut être que l'utilisation de findParentRow n'est pas la bonne dans mon cas ... ou que c'est moi qui l'utilise pas correctement
des suggestions ?!
Merci
KiMbOoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h02.


 
 
 
 
Partenaires

Hébergement Web