Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2011, 09h38   #1
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
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 :
1
2
3
4
5
 
$dDao=new D();
$nDao=new N();
$result=$dDao->calPoids();
$this->view->array_poids=$result;
dans MVC Model:
Code :
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 :
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!!
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 10h18   #2
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Bonjour,

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

Code :
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 :
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
}
?>
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 10h31   #3
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
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 :
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
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 11h11   #4
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Et si tu essayes:

Code :
1
2
3
 
foreach($this->array_pois as $id=>$poids)
    echo $poids['poids1'];
Est ce ke ca change quelque chose?
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 11h40   #5
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
Citation:
Envoyé par flilou Voir le message
Et si tu essayes:

Code :
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
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 11h55   #6
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
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 :
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 :
1
2
3
 
foreach($this->array_poids as $key=>$value)
    echo $value['poids1'];
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 14h19   #7
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
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 :
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 :
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!
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 14h55   #8
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
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 :
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.....
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h12   #9
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
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 :
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.
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h19   #10
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
J'ai fais une erreur dans la boucle "foreach" au lieu de $array_poids il faut mettre $this->array_poids:
Code :
1
2
 
foreach($this->array_poids as $i=>$poids)
Si tu affiche ton tableau $this->array_poids en faisant dans ta vue:
Code :
1
2
 
Zend_Debug::dump($this->array_poids);
qu'est-ce que tu obtiens?
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h33   #11
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
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 :
1
2
 
foreach($this->array_poids as $i=>$poids)
Si tu affiche ton tableau $this->array_poids en faisant dans ta vue:
Code :
1
2
 
Zend_Debug::dump($this->array_poids);
qu'est-ce que tu obtiens?
j'ai obtenu:
Code :
1
2
3
<pre>object(Zend_Db_Table_Rowset)#107(10)
{
[&quor;_data:protected&quot
quelque chose comme ça
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h48   #12
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
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 :
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   
 
}
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h17   #13
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
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 :
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?
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h24   #14
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
ouiiiii

désolé il s'agit d'une erreur de ma part!!!
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h31   #15
Futur Membre du Club
 
Femme
Inscription : juin 2011
Messages : 74
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 74
Points : 15
Points : 15
Merci beaucoup ! J'ai résolu mon problème
laomaotou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web