Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je ne vois pas comment personnaliser ma requête Select en voulant récupérer des champs bien précis issus de tables joints.
Ex: ma requête SQL :
SELECT STRUCTURE.NOM STRUCTURE_NOM, APPARTEMENT.NUM APPARTEMENT_NUM, LOCATION.*, LOCATAIRE.PRENOM, LOCATAIRE.NUM_DOSSIER LOCATAIRE_NUM_DOSSIER, LOCATAIRE.NOM FROM STRUCTURE, APPARTEMENT, LOCATION, LOCATAIRE WHERE LOCATAIRE.ID_LOCATAIRE = LOCATION.ID_LOCATAIRE AND APPARTEMENT.ID_APPARTEMENT = LOCATION.ID_APPARTEMENT AND STRUCTURE.ID_STRUCTURE = APPARTEMENT.ID_STRUCTURE
Pour le FROM et le WHERE c'est facile, mais le select ???
Merci
PS: pour l'instant j'utilise la méthode db->query($select);
Hors ligne
Bonjour, moi je n'utilise pas cette methode d'accès aux donnée, je fais comme ceci (en reprenant tes tables)
$select = new Zend_Db_Select( Zend_Registry::get('db') ); $select->from( ' location ', 'id_locataire=id_locataire ); === ta table principale $select->join( 'locataire', ) $select->join( 'appartement', 'id_appartement=id_appartement' ); tu peux faire plusieurs fois 'join', il faut que ta table etrangère soit en relation avec la table principale (il me semble) $select->query()->fetchAll();
Avec ceci tu récupère l'ensemble de tes valeurs de toutes les tables appelés.
Bonne chance
Hors ligne
Mais comment récupérer les noms des champs dans les tables ? Je suis habitué à utiliser des alias, c'est possible ? Ou bien faut-il acceder à mon champs de table par SELECT table1.champs... ? Comment faites vous ?
Hors ligne
Ok !
Donc pour afficher la valeur que je souhaite, il te faut faire :
Dans ton controlleur :
$this->view->taVue = $select->query->fecthAll();
Dans ton script d'affichage :
<?php foreach( $this->taVue as $vu ){ echo $vu['nom_colonne']; echo $vu['id_locataire']; echo $vu['id_appartement']; echo $vu['nom_appartement']; } ?>
Tu peux donc renseigner n'importe quel élément à l'intérieur [ ]. Tu n'utilises pas de prefixe pour tes noms de champs du coup, il faudra peut être que tu passes, effectivement, par des prefixes ou alias car sinon tu as la même informations... Pour ma part, chaque nom de champ est unique dans toutes mes tables de ma base
Bon courage
Dernière modification par cyprien (05-03-2008 10:41:37)
Hors ligne
Je pense que si tu lis bien la page du manuel concernant zend_db_select tu trouvera tout ce que tu souhaites (je viens d'y voir les réponses que tu cherches ).
Hors ligne
J'ai bien lu les docs mais c'est au niveau du select que ça bloc. Concrètement voici ma requête sql en dur :
$this->sql_list_location = "SELECT STRUCTURE.NOM STRUCTURE_NOM, APPARTEMENT.NUM APPARTEMENT_NUM, LOCATION.* , LOCATAIRE.PRENOM PRENOM, LOCATAIRE.NUM_DOSSIER LOCATAIRE_NUM_DOSSIER, LOCATAIRE.ID_LOCATAIRE ID_LOCATAIRE, APPARTEMENT.ID_APPARTEMENT ID_APPARTEMENT, LOCATAIRE.NOM NOM, STRUCTURE.ID_STRUCTURE ID_STRUCTURE FROM STRUCTURE, LOCATION, LOCATAIRE, APPARTEMENT WHERE LOCATAIRE.ID_LOCATAIRE = LOCATION.ID_LOCATAIRE AND APPARTEMENT.ID_APPARTEMENT = LOCATION.ID_APPARTEMENT AND STRUCTURE.ID_STRUCTURE = APPARTEMENT.ID_STRUCTURE AND APPARTEMENT.IS_LIBRE <> 1;";
Je ne suis pas vraiment habitué à faire des inner joins, mais ma requête fonctionne sous MySQL. Etant donné que je fais une requête sur 4 tables je n'ai pas forcément envie de récupérer tous les champs et plusieurs champs de table portent le même nom (date_creation, nom, prenom, etc.)
Pour l'instant je ne vois pas comment faire en utilisant mon objet dérrivé Zend_Db_Table_Abstract. Peut-être que ce n'est pas réalisable comme manoeuvre car je n'ai pas vu d'exemple sur la personnalisation du Select et pour l'instant j'utilise _db->query($select) qui fonctionne mais ne me conviens pas.
Hors ligne