Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-05-2012 12:53:10

hayet
Nouveau membre
Date d'inscription: 04-05-2012
Messages: 8

Requête avec zend

Bonjour, j'ai deux table relié avec une "FK" "code_clt" j'ai besoin d'afficher les contacts (table cntct_clt) d'un client donné (table client) en comparant le code_clt, commen faire ça avec le zend ? hmm j'arrive pas
le code sql je croi que c'est
select *
from client C, cntct_clt Cn
where C.code_clt = Cn.code_clt

j'ai une fonction liste :
"class Library_Model_ListeContact {
   
    public function listeContact() {
                   
            $db = Zend_Db_Table::getDefaultAdapter();
        $selectCntctFourns = new Zend_Db_Select( $db );
        $selectCntctFourns->from( 'frn_contact','fournisseur')
                                    ->join('fournisseur', 'fournisseur.CODE_FRN = frn_contact.CODE_FRN') 
                                    ->where('CODE_FRN = ?', 'CODE_FRN');
                                     //->where('fournisseur.CODE_FRN = ?', 'CODE_FRN');
       
        return $selectCntctFourns;
    }
comment puis-je faire ce test pour que j'ai à l'affichage les contact d'un client donné ?
merci

Hors ligne

 

#2 12-05-2012 17:34:56

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: Requête avec zend

Bonjour,

Moi j'aurais écrit la requête SQL comme ça :

Code:

[lang=sql]SELECT *
FROM client AS C
LEFT JOIN cntct_clt AS Cn ON Cn.code_clt = C.code_clt

Ce qui donnerait avec Zend un truc du genre :

Code:

[lang=php]
// Récupère le database adapter par défaut
$db                 = Zend_Db_Table::getDefaultAdapter();
    
// Construit la requête et met les résultats directement dans un rowset
$selectCntctFourns     = $db->fetchAll($db->select()
                                ->from(array('C' => 'client'))
                                ->joinLeft(array('Cn' => 'cntclt_clt'),
                                            'C.code_client = Cn.code_client',
                                            array()));
// Renvoie false si aucun résultat
return(sizeof(selectCntctFourns) > 0 ? selectCntctFourns : false);

A tester smile

Je ne suis pas sûr d'avoir écrit ça correctement, parce que je ne fais pas mes requêtes directement dans mes controllers ou dans mes plugins. J'utilise les models Zend_Db_Table_Abstract, et les dependentTables et findDependentRowset, ce qui présente bien des avantages, entre autres, d'avoir à écrire les liaisons entre les tables soi-même smile

Et désolé pour l'indentation du code, mais j'y arrive pas avec le bbcode hmm

Dernière modification par delorbe (12-05-2012 22:05:59)

Hors ligne

 

#3 12-05-2012 20:17:33

hayet
Nouveau membre
Date d'inscription: 04-05-2012
Messages: 8

Re: Requête avec zend

salut, merci de me répondre smile
alors j'ai déjà essayer quelque chose comme ça ça m'affiche toujours tous les contacts de tous les client, j'ai écrit ton code et j'ai toujours le même résulta :'(
remarque : ce code est sous :
class Library_Model_ListeContact {
    public function listeContact() {

après je fais appel à cette fonction dans le controleur.

Hors ligne

 

#4 12-05-2012 22:04:15

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: Requête avec zend

C'est normal smile

Cette requête t'affichera toutes les infos de la table client et de la table cntct_clt qui ont la clé code_client en commun.

C'est vrai que je n'avais pas vu ta question : tu veux afficher les infos d'un client donné.

Si tu veux limiter tes résultats à un client, il te faut ajouter une clause WHERE code_client = x
Où x est l'id du client pour lequel tu veux afficher les résultats.

En SQL, ça donne :

Code:

[lang=sql]SELECT *
FROM client AS C
LEFT JOIN cntct_clt AS Cn ON Cn.code_clt = C.code_clt
WHERE C.code_client = x

Et dans ta fonction :

Code:

[lang=php]
public function listeContact($codeClient = null){
    // Si on a appelé la fonction avec un code client, alors on fait le traitement
    if($codeClient){
        // Récupère le database adapter par défaut
        $db                 = Zend_Db_Table::getDefaultAdapter();
            
        // Construit la requête et met les résultats directement dans un rowset
        $selectCntctFourns     = $db->fetchAll($db->select()
                                        ->from(array('C' => 'client'))
                                        ->joinLeft(array('Cn' => 'cntclt_clt'),
                                                    'C.code_client = Cn.code_client',
                                                    array())
                                        ->where('C.code_client = ?', $codeClient));
        // Renvoie false si aucun résultat
        return(sizeof(selectCntctFourns) > 0 ? selectCntctFourns : false);
    }
}

Puis tu appelles ta fonction :

Code:

[lang=php]listeContact(x);

Où x est toujours ton code client.

Dernière modification par delorbe (12-05-2012 22:07:24)

Hors ligne

 

#5 12-05-2012 22:30:10

hayet
Nouveau membre
Date d'inscription: 04-05-2012
Messages: 8

Re: Requête avec zend

ça marche toujours pas :'(

class Library_Model_ListeContact {
    public function listeContact($CODE_FRN = null) {
if($CODE_FRN){
        $db = Zend_Db_Table::getDefaultAdapter();
           $selectCntcFRN= $db->fetchAll($db->select()
                                        ->from(array('F' => 'fournisseur'))
                                        ->joinLeft(array('Fn' => 'frn_contact'),
                                                    'F.fournisseur = Fn.frn_contact',
                                                    array())
                                        ->where('F.fournisseur= ?', $CODE_FRN));
        return(sizeof($selectCntctFRN) > 0 ? $selectCntctFRN : false);
    }
}

ça fait 2 jour que j'arrive pas à fixer ça :'( il m'affiche toujours tous les contacts de tous les fourniseurs hmm

Hors ligne

 

#6 12-05-2012 22:41:32

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: Requête avec zend

Heu...

Tu parles au départ de :
1. Une table client avec en clé primaire code_client
2. Une table cntct_clt avec en clé étrangère code_client

Si je lis bien ton code, tu fais tes tests avec :
1. Une table fournisseur avec en clé primaire fournisseur
2. Une table frn_contact avec en clé étrangère frn_contact

Tu es sûr que tu ne t'es pas embrouillé dans tes tests?

Hors ligne

 

#7 13-05-2012 01:30:25

hayet
Nouveau membre
Date d'inscription: 04-05-2012
Messages: 8

Re: Requête avec zend

salut, non non c'est juste que j'ai deux module client et fournisseur avec les mêmes actions, j'ai posé ma question en utilisant client et j'écrit le code pour le fournisseur :p
Mon problème que quand je clique afficher contacts d'un fournisseur donnée on m'affiche touts les contact de tous les fournisseur hmm hors que j'ai besoin d'afficher que les contacts d'un fournisseur tel !
Merci pour votre aide, j'en ai tellement besoin smile

Hors ligne

 

#8 13-05-2012 13:26:59

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: Requête avec zend

Il n'empêche que dans le code que tu donnes, la table s'appelle exactement pareil que la clé...

Code:

[lang=php]
->from(array('F' => 'fournisseur'))
->joinLeft(array('Fn' => 'frn_contact'),
                        'F.fournisseur = Fn.frn_contact',
                        array())

Ici , je comprends que dans ta table fournisseur, la clé s'appelle fournisseur.
Et que dans ta table frn_contact, la clé s'appelle frn_contact

Je ne sais pas si ça peut poser un souci au niveau SQL, mais il est en général recommandé de nommer les champs (surtout la clé primaire) autrement que la table elle-même.

Cela dit, si ça passe comme ça, alors bon...

De plus, j'ai fait une petite erreur dans mon code.
Tu veux récupérer un seul enregistrement, il ne faut donc pas utiliser $db->fetchAll() mais $db->fetchRow();

Hors ligne

 

#9 13-05-2012 13:35:34

hayet
Nouveau membre
Date d'inscription: 04-05-2012
Messages: 8

Re: Requête avec zend

j'arrive pas :'''''(((( help pleeeez :'( pourquoi j'ai tjrs  toutes la liste qui s'affiche :'(

Hors ligne

 

#10 13-05-2012 18:04:17

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: Requête avec zend

Bon, ben problème résolu par mail smile

Le problème principal était - à mon avis - que le code fournisseur passé en GET lors de l'appel de la page, n'était tout simplement pas récupéré, et donc pas utilisé en clause WHERE de la requête smile

Hors ligne

 

#11 13-05-2012 21:54:32

hayet
Nouveau membre
Date d'inscription: 04-05-2012
Messages: 8

Re: Requête avec zend

Merci infiniment pour l'aide big_smile problème résolu smile

Hors ligne

 

#12 13-05-2012 22:17:41

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: Requête avec zend

De rien wink
Bon courage pour la suite de ton projet

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