IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

findParentRow et Jointures


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    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 : 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 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
     
    <?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 : 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

    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/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
     
    <?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 : 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/Civilites.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'; 
     
    }
    fichier models/CivRow.php

    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 {
     
     
     
     
    }
    et ainsi de suite pour les autres fichiers models/tables Grades Entites etc...

    Quelqu'un pour m'aider. Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    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

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. pb jointure texture
    Par dweis dans le forum DirectX
    Réponses: 2
    Dernier message: 24/06/2003, 13h33
  3. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21
  4. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  5. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo