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 :

join table


Sujet :

Zend Framework PHP

  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut join table
    Je voudrais utiliser joinLeft dans MVC Model
    J'ai deux tables: d et n, il y a d.poids et n.poids, je veux retirer les deux poids, mais je sais pas dans mon view, comment à faire ça?
    dans MVC Controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $dDao=new D();
    $nDao=new N();
    $result=$dDao->calPoids();
    $this->view->array_poids=$result;
    dans MVC Model:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function calPoids()
    {
    $select=$this->select()
    ->from('d','d.poids')
    ->joinLeft('n','d.id=n.id','n.poids');
    return $this->fetchAll($select);
    }
    dans MVC view:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    foreach($this->array_poids as $poids)
    {
    echo $poids->getPoids();  // ici je voudrais retirer n.poids et d.poids, comment à faire ça? 
    }
    ?>
    En effet, je voudaris retirer n.poids et d.poids, puis calcule n.poids+d.poids
    Merci!!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    Bonjour,

    lors de la construction de ta requête utilise des alias pour distinguer les deux champs 'n.poids' et 'd.poids':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function calPoids()
    {
    $select=$this->select()
    ->from('d',array('poids1'=>'d.poids'))
    ->joinLeft('n','d.id=n.id', array('poids2'=>'n.poids'));
    return $this->fetchAll($select);
    }
    Pour récupérer ces deux valeurs de poids dans ta vue il te suffit donc de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    foreach($this->array_poids as $poids)
    {
    echo $poids['poids1'];  // ici  tu récupère d.poids
    echo $poids['poids2']; // et n.poids
    }
    ?>

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Citation Envoyé par flilou Voir le message
    Bonjour,

    lors de la construction de ta requête utilise des alias pour distinguer les deux champs 'n.poids' et 'd.poids':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function calPoids()
    {
    $select=$this->select()
    ->from('d',array('poids1'=>'d.poids'))
    ->joinLeft('n','d.id=n.id', array('poids2'=>'n.poids'));
    return $this->fetchAll($select);
    }
    Pour récupérer ces deux valeurs de poids dans ta vue il te suffit donc de faire:

    [code]
    <?php
    foreach($this->array_poids as $poids)
    {
    echo $poids['poids1']; // ici tu récupère d.poids
    echo $poids['poids2']; // et n.poids
    }
    ?>
    Merci, mais $poids['poids1']; n'est pas correct,érreur: Cannot use object as array

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    Et si tu essayes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach($this->array_pois as $id=>$poids)
        echo $poids['poids1'];
    Est ce ke ca change quelque chose?

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Citation Envoyé par flilou Voir le message
    Et si tu essayes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach($this->array_pois as $id=>$poids)
        echo $poids['poids1'];
    Est ce ke ca change quelque chose?
    C'est pas correct, $id existe pas

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    as-tu essayé au moins?

    $id correspond à la valeur de la clé de ton tableau associatif $this->array_poids car $array_poids doit être de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    array('0'=>array('poid1'=>1, 'poid2'=>2),
             '1'=>array('poid1'=>3, 'poid2'=>4),
             .....)
    dans cet exemple, $id prendra les valeurs 0, puis 1, ... au fur et à mesure que tu parcoures les éléments de ton tableau dans ta boucle for.

    $id n'a rien à voir avec ton champ 'id' de ta table, t'aurais pu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach($this->array_poids as $key=>$value)
        echo $value['poids1'];

  7. #7
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Citation Envoyé par flilou Voir le message
    as-tu essayé au moins?

    $id correspond à la valeur de la clé de ton tableau associatif $this->array_poids car $array_poids doit être de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    array('0'=>array('poid1'=>1, 'poid2'=>2),
             '1'=>array('poid1'=>3, 'poid2'=>4),
             .....)
    dans cet exemple, $id prendra les valeurs 0, puis 1, ... au fur et à mesure que tu parcoures les éléments de ton tableau dans ta boucle for.

    $id n'a rien à voir avec ton champ 'id' de ta table, t'aurais pu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach($this->array_poids as $key=>$value)
        echo $value['poids1'];
    Désolée, je ne comprends pas bien. En effet, dans table1: key est id. mais dans table2: key est ide. Leur noms ne sont pas même. comment je peux faire? Merci beaucoup!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    ta boucle "foreach" se situe dans ta vue, tu n'interviens donc plus dans tes tables: tu ne fais donc appel ni à ta clé primaire "id" ni "ide".

    Dans ta vue, tu as reçu un tableau: $this->array_poids qui contient deux colonnes poids1 et poids2 (cf. ta requête $select).
    Par exemple, ton tableau $array_poids pourra ressembler à cela:
    -------------------------
    | poids1 | poids2 |
    -------------------------
    | __2___ | __3___|
    | __4___ | __5___|
    | __6___ | __7___|


    pour parcourir un tel tableau en php, avec une boucle "foreach" tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($array_poids as $i=>$poids){
       echo $poids['poid1'] ;
       echo $poids['poid2'];
    }
    Ta boucle va donc faire le parcours suivant:
    $i = 0; $poids = array('poids1'=>2, 'poids2'=>3),
    puis $i = 1; $poids = array('poids1'=>4, 'poids2'=>5)
    puis $i = 2; $poids = array('poids1'=>6, 'poids2'=>7).
    fin de parcours.

    Tu vois donc que $i (que j'ai appelé dans mes post précédents $id ou $key) n'a rien à voir avec la clé primaire de ta table mais correspond au numéro de la ligne du tableau $array_poids lors de son parcours.

    Voilà j'espère avoir été clair.....

  9. #9
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Citation Envoyé par flilou Voir le message
    ta boucle "foreach" se situe dans ta vue, tu n'interviens donc plus dans tes tables: tu ne fais donc appel ni à ta clé primaire "id" ni "ide".

    Dans ta vue, tu as reçu un tableau: $this->array_poids qui contient deux colonnes poids1 et poids2 (cf. ta requête $select).
    Par exemple, ton tableau $array_poids pourra ressembler à cela:
    -------------------------
    | poids1 | poids2 |
    -------------------------
    | __2___ | __3___|
    | __4___ | __5___|
    | __6___ | __7___|


    pour parcourir un tel tableau en php, avec une boucle "foreach" tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($array_poids as $i=>$poids){
       echo $poids['poid1'] ;
       echo $poids['poid2'];
    }
    Ta boucle va donc faire le parcours suivant:
    $i = 0; $poids = array('poids1'=>2, 'poids2'=>3),
    puis $i = 1; $poids = array('poids1'=>4, 'poids2'=>5)
    puis $i = 2; $poids = array('poids1'=>6, 'poids2'=>7).
    fin de parcours.

    Tu vois donc que $i (que j'ai appelé dans mes post précédents $id ou $key) n'a rien à voir avec la clé primaire de ta table mais correspond au numéro de la ligne du tableau $array_poids lors de son parcours.

    Voilà j'espère avoir été clair.....
    Merci et je pense que je comprends mieux. Mais quand je essaye ça, il dit: can't use an object as an array.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    J'ai fais une erreur dans la boucle "foreach" au lieu de $array_poids il faut mettre $this->array_poids:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    foreach($this->array_poids as $i=>$poids)
    Si tu affiche ton tableau $this->array_poids en faisant dans ta vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Zend_Debug::dump($this->array_poids);
    qu'est-ce que tu obtiens?

  11. #11
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Citation Envoyé par flilou Voir le message
    J'ai fais une erreur dans la boucle "foreach" au lieu de $array_poids il faut mettre $this->array_poids:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    foreach($this->array_poids as $i=>$poids)
    Si tu affiche ton tableau $this->array_poids en faisant dans ta vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Zend_Debug::dump($this->array_poids);
    qu'est-ce que tu obtiens?
    j'ai obtenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <pre>object(Zend_Db_Table_Rowset)#107(10)
    {
    [&quor;_data:protected&quot
    quelque chose comme ça

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    Ceci indique que le résultat renvoyé par ta fonction n'est pas un tableau mais un objet de type Zend_Db_Table_Rowset.
    Dans ta boucle foreach tu dois donc procéder autrement pour récupérer tes 2 valeurs de poids:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach($this->array_poids as $poids){
     
        $poid1 = $row->poids1; // récupération de la première colonne du résultat de ta requête
        $poid2 = $row->poids2; // récupération de la deuxième colonne du résultat de ta requête   
     
    }

  13. #13
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Citation Envoyé par flilou Voir le message
    Ceci indique que le résultat renvoyé par ta fonction n'est pas un tableau mais un objet de type Zend_Db_Table_Rowset.
    Dans ta boucle foreach tu dois donc procéder autrement pour récupérer tes 2 valeurs de poids:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach($this->array_poids as $poids){
     
        $poid1 = $row->poids1; // récupération de la première colonne du résultat de ta requête
        $poid2 = $row->poids2; // récupération de la deuxième colonne du résultat de ta requête   
     
    }
    ici, $row dans ce cas, est $poids?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    ouiiiii

    désolé il s'agit d'une erreur de ma part!!!

  15. #15
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut
    Merci beaucoup ! J'ai résolu mon problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/10/2013, 13h52
  2. Update join table
    Par sampla dans le forum Débuter
    Réponses: 2
    Dernier message: 22/07/2012, 09h28
  3. [JDO] Annotations pour intégrer une relation 1-N par map dans sa join table
    Par Blustuff dans le forum Persistance des données
    Réponses: 0
    Dernier message: 31/01/2009, 13h33
  4. Aide requete Join + table relationnelle
    Par yann5559 dans le forum Requêtes
    Réponses: 5
    Dernier message: 31/07/2008, 15h13
  5. Join entre 2 tables provenant de Base de donnees differentes
    Par edmotets dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/11/2005, 08h33

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