Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 30-06-2011 17:17:24

devover
Nouveau membre
Date d'inscription: 30-06-2011
Messages: 5

[Zend_Db][1.11.3] Requete jointe, mais une seule table en resultat

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 :

Code:

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 :

Code:

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

Code:

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

 

#2 01-07-2011 11:11:53

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [Zend_Db][1.11.3] Requete jointe, mais une seule table en resultat

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

 

#3 01-07-2011 11:46:37

Ithier
Membre
Date d'inscription: 05-01-2010
Messages: 85

Re: [Zend_Db][1.11.3] Requete jointe, mais une seule table en resultat

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

 

#4 01-07-2011 15:19:21

devover
Nouveau membre
Date d'inscription: 30-06-2011
Messages: 5

Re: [Zend_Db][1.11.3] Requete jointe, mais une seule table en resultat

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

 

#5 04-07-2011 11:32:36

devover
Nouveau membre
Date d'inscription: 30-06-2011
Messages: 5

Re: [Zend_Db][1.11.3] Requete jointe, mais une seule table en resultat

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

 

#6 04-07-2011 11:40:01

devover
Nouveau membre
Date d'inscription: 30-06-2011
Messages: 5

Re: [Zend_Db][1.11.3] Requete jointe, mais une seule table en resultat

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.

Code:

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

 

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