Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je debute avec ZF, globalement je m' en sortais jusqu'a ce que je tente de faire une requete jointe.
Je passe par un Zend_Db_Table_Select pour creer la requete suivante, qui fonctionne dans phpmyadmin :
SELECT `t1`.*, `t2`.* FROM `bibliotheque` AS `t1` INNER JOIN `users` AS `t2` ON t1.userId = t2.id
Mais lorsque je regarde le contenu de mon resultat je ne vois que la table bibliotheque, mais pas la table jointe users :
object(Zend_Db_Table_Rowset)#56 (10) { ["_data:protected"] => array(3) { [0] => array(8) { ["bookId"] => string(1) "1" ["bookName"] => string(4) "test" ["description"] => string(4) "test" ["userId"] => string(1) "1" ["date_create"] => NULL ["date_publish"] => NULL ["date_update"] => NULL ["date_delete"] => NULL }
Et voici le code de mon model
<?php class Model_Bibliotheque extends Zend_Db_Table_Abstract { protected $_name = 'bibliotheque'; protected $_dependentTables = array('users'); public function getList(){ $select = $this->getAdapter()->select() ->from(array('t1'=>$this->_name)) ->join(array('t2'=>'users'), 't1.userId = t2.id'); // ->setIntegrityCheck(false); $row = $this->fetchAll(); echo $select->__toString(); Zend_Debug::dump($row); return($row); } } ?>
Pouvez vous me dire ce que je fais de mal, merci d'avance pour votre aide
Hors ligne
Bonjour,
Pour faire un SELECT sur plusieurs tables jointes, il vous faut utiliser "setIntegrityCheck( false )", qui est d'ailleurs commenté dans votre code.
Hors ligne
Pour ajouter les rubriques de la jointure dans le select il faut le préciser dans un paramètre supplémentaire de la fonction join.
C'est expliqué dans le manuel: http://framework.zend.com/manual/fr/zen … lding.join
Le troisième argument de join() est un tableau des noms de colonnes, comme c'est utilisé dans la méthode from(). La valeur par défaut est "*", la méthode supporte les alias, les expressions, et les objets Zend_Db_Expr de la même manière que le tableau de noms de colonnes de la méthode from().
Hors ligne
Bonjour,
Merci pour vos reponses.
@f.garoby j'avais fais le test avec setIntegrityCheck( false ), puis comme ca ne me donnait pas le resultat esperé, j'avais commente la ligne.
@Ithier lorsque j'ajoute le troisieme argument, je n'ai pas acces a ma table user.
J'ai mal expliqué mon probleme c'est que je n'ai pas acces aux resultats des deux tables.
Hors ligne
Bonjour,
J'ai trouvé une petite solution dans cette page de la documentation http://framework.zend.com/manual/fr/zen … ships.html
Mais ça ne m'arrange pas vraiment car pour chaque résultat je dois relancer une requête. J'aimerai vraiment pouvoir accéder au résultat de ma requête jointe.
Aidez moi svp
Hors ligne
Voici mon model modifié. Je peux recuperer les resultats des deux tables, mais le framework ne semble pas utiliser ma requete jointe. Il utilise le model de ma table utilisateur dans lequel j'ai preciser les relations entre les tables.
class Model_Bibliotheque extends Zend_Db_Table_Abstract { protected $_name = 'bibliotheque'; protected $_dependentTables = array('users'); public function getList(){ $select = $this->select() ->from(array('t1'=>$this->_name), array('t1.bookName')) ->join(array('t2'=>'users'), 't1.userId = t2.id', array('t2.username')) ->setIntegrityCheck(false); Zend_Debug::dump($select->__toString()); $row = $this->fetchAll(); Zend_Debug::dump($row->current()->findDependentRowset('Model_User')->toArray()); Zend_Debug::dump($row->current()->toArray()); return($row); } }
Hors ligne
Pages: 1