Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-03-2008 09:09:20

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Personnaliser un table->select()

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 :

Code:

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

 

#2 05-03-2008 09:39:52

cyprien
Membre
Lieu: Niort
Date d'inscription: 14-02-2008
Messages: 10
Site web

Re: Personnaliser un table->select()

Bonjour, moi je n'utilise pas cette methode d'accès aux donnée, je fais comme ceci (en reprenant tes tables)

Code:

     $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 wink

Hors ligne

 

#3 05-03-2008 10:20:21

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Personnaliser un table->select()

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

 

#4 05-03-2008 10:30:58

cyprien
Membre
Lieu: Niort
Date d'inscription: 14-02-2008
Messages: 10
Site web

Re: Personnaliser un table->select()

Ok !

Donc pour afficher la valeur que je souhaite, il te faut faire :
Dans ton controlleur :

Code:

$this->view->taVue = $select->query->fecthAll();

Dans ton script d'affichage :

Code:

<?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 smile

Bon courage

Dernière modification par cyprien (05-03-2008 10:41:37)

Hors ligne

 

#5 05-03-2008 13:28:27

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Personnaliser un table->select()

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 smile ).

Hors ligne

 

#6 06-03-2008 06:05:21

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Personnaliser un table->select()

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 :
       

Code:

$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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages