Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-12-2010 03:25:49

bamak
Nouveau membre
Date d'inscription: 07-12-2010
Messages: 6

ZEND_DB et jointures de tables

bonjour à vous

Je test la jointure de table sous ZEND_DB
j'ai ma classe enfant :


class Application_Model_DbTable_Albums extends Zend_Db_Table_Abstract
{
    protected $_name = 'albums';
   
// jointure avec région   
    protected $_referenceMap    = array(
             'Noms' => array(
            'columns'           => 'id_reg',
            'refTableClass'     => 'Application_Model_DbTable_Regions',
            'refColumns'        => 'id_reg'
        ),
   );
}

qui est jointe à ma classe Parent : région

class Application_Model_DbTable_Regions extends Zend_Db_Table_Abstract
{
    protected $_name = 'regions';
    protected $_dependentTables = array('Application_Model_DbTable_Albums');
}


Relation N --> 1

.... Je me demande comment obtenir dans mon controleur
un tableau avec le resultat de la jointure ?
A' savoir toutes les colonnes de la table parent associées à celles de la table enfant
.... une sorte de vue


J'ai demarré quelque chose comme cela mais je ne sais pas ou aller ?

  function indexAction()
{
    $albums = new Application_Model_DbTable_Albums();
    $this->view->albums = $albums->fetchAll();
    $ligne = $albums->fetchAll()->current();
    $nomRegion = $ligne->findParentRow('Application_Model_DbTable_Regions', 'Noms');
    $this->view->nomRegion = $nomRegion;
   }

Là j'ai deux tableaux pour ma vue au lieu d'un seul dénormalisé

Merci pour votre aide

Hors ligne

 

#2 15-12-2010 12:13:48

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: ZEND_DB et jointures de tables

Zend_Db_Select

Hors ligne

 

#3 14-01-2011 19:24:50

mbeaudoin
Nouveau membre
Date d'inscription: 14-01-2011
Messages: 1

Re: ZEND_DB et jointures de tables

Bonjour, je me pose la même question que bamak. Comme la réponse de sekajin n'est pas vraiment un réponse claire, je me demandais si celle-ci pourrait être un peu plus élaboré. Quand tu parle d'utiliser Zend_Db_Select, tu parle de l'utiliser de quelle façon ?

J'ai regardé en détails la documentation ici. http://framework.zend.com/manual/fr/zen … ships.html La seul référence au "Select" semble être dans l'exemple #3, mais celle-ci contient probablement des erreurs car, premièrement en utilisant les BDD d'exemple, le champ "name" n'existe pas.

Merci d'avance

Hors ligne

 

#4 17-01-2011 11:45:26

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: ZEND_DB et jointures de tables

Salut,

Effectivement il faut passer par Zend_Db_Select pour effecter des jointures. C'est possible avec Zend_Db_Table mais il faut passer par des solutions pas très élégantes à base de setIntegrityCheck(false)...

Ce que je fais personnellement, c'est que dans mon mapper je définis les relations, par exemple :

Code:

$relations = array('profile' => array('mapper' => 'Application_Mapper_Profile'));

Je définis dans chaque mapper une fonction with prenant le nom d'une relation. Ainsi, si je veux charger un utilisateur avec son profil, j'aurais quelque chose du genre :

Code:

$user = $userMapper->newQuery()->where("username = toto")->with('profile')->fetch();

La fonction with va juste créer la jointure sur le select.

La question qu'il reste c'est : comment créer deux objets de type différents ? La seule solution que j'ai trouvé est de préfixé chaque élément par le nom de la table. Ainsi, les noms de colonnes pour l'utilisateur seront par exemple user.id, user.username, user.password... Ce qui implique qu'il faut que ton mapper définisse le nom de tous tes éléments. A contrario, quand tu appelles la fonction with, tu vas récupérer toutes les colonnes et les préfixées par le nom de la classe jointe ("profile").

Ensuite, une fois que tu as récupéré les valeurs, tu peux facilement récupérer les bonnes colonnes et créer les objets correspondants.

Je ferai sûrement un p'tit message la dessus. On peut facilement avoir des jointures, du lazy-loading... sans passer par des solutions trop complexes à la Doctrine, et qui suffisent pour la majorité des usages. D'ailleurs c'était ce que proposais Zend_Entity avant d'être abandonné, mais on peut facilement réécrire une petite partie utile.

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