Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-05-2008 16:41:31

fetard
Membre
Date d'inscription: 08-04-2008
Messages: 21

[Zend_Table] Relier deux tables avec table d'association

Bonjour
Le problème que j'ai est tout bête si j'avais à le résoudre en SQL standard, mais avec ZF je bloque un peu.

Basiquement, j'ai deux objets $blog et $membre (correspondant aux tables blogs et membres) et une table d'association entre les deux.

Le problème est que par exemple dans mon controleur Blogs, je fais un $this->view->blogs = $blog->fetchAll(); qui me renvoie très logiquement les champs de la table correspondante.

Or je cherche à effectuer une liaison entre ces tables et donc ajouter au résultat renvoyé des champs supplémentaires (en l'occurence les membres correspondant à la ligne de résultat de "blog").

Dois je le faire coté vue (à mon avis non) ?

Edit : j'ai modifié ma classe Blogsmembres (qui relie les deux) en :

Code:

class Blogsmembres extends Zend_Db_Table_Abstract
{
    protected $_name = 'blogs_membres';
    protected $_primary = array('membre_id','blog_id');
    protected $_referenceMap    = array(
     'auteur' => array( 
            'columns'           => 'membre_id',
            'refTableClass'     => 'Membres',
            'refColumns'        => 'id'
        ),   
     'realisations' => array( 
            'columns'           => 'blog_id', 
            'refTableClass'     => 'Blogs', 
            'refColumns'        => 'id'
        ));
}

Et voici les deux classes objet associées :

Code:

class Blogs extends Zend_Db_Table_Abstract
{
    protected $_name = 'blogs';
    protected $_primary = 'id';
    protected $_dependentTables = array('Blogsmembres');
}

class Membres extends Zend_Db_Table_Abstract
{
    protected $_name = 'membres';
    protected $_primary = 'id';
    protected $_dependentTables = array('Blogsmembres');
}

Mais comment puis je récupérer l'info "auteur" depuis ma vue ? j'avais tenté un findMembresViaBlogsmembres() mais vu que je suis dans une boucle dans ma vue, je ne m'en sors pas

Dernière modification par fetard (09-05-2008 22:55:15)

Hors ligne

 

#2 09-05-2008 23:36:55

fetard
Membre
Date d'inscription: 08-04-2008
Messages: 21

Re: [Zend_Table] Relier deux tables avec table d'association

Auto-réponse :
J'arrive à me débrouiller par des join :

Code:

$selection=$blog->select()->setIntegrityCheck(false);
        $selection->from($blog);
        $selection->join("blogs_membres","blogs.id=blogs_membres.blog_id");
        $selection->join("membres","membres.id=blogs_membres.blog_id");
        $this->view->sites=$blog->fetchAll($selection);

Mais c'est super crade et une fois de plus, je comprends pas l'intérêt de $_referenceMap sad

Si quelqu'un peut m'éclairer

Dernière modification par fetard (10-05-2008 00:49:01)

Hors ligne

 

#3 10-05-2008 00:43:58

fetard
Membre
Date d'inscription: 08-04-2008
Messages: 21

Re: [Zend_Table] Relier deux tables avec table d'association

Et dans ma vue, j'arrive à récupérer le membre auteur du blog par :

Code:

$membre_auteur=$site->findMembresViaBlogsmembres();
foreach($membre_auteurs as $membre_auteur) : echo $membre_auteur->pseudo;

Même si c'est pas parfait vu que ca me sort, si j'ai plusieurs auteurs, une liste toute attachée...

Hors ligne

 

#4 10-05-2008 01:26:56

fetard
Membre
Date d'inscription: 08-04-2008
Messages: 21

Re: [Zend_Table] Relier deux tables avec table d'association

Finalement je suis passé par une fonction directement dans le modèle :

Code:

    public function populateAuthors($objects)
    {
        foreach($objects as $object)
        {
            $authors=$object->findMembresViaBlogsmembres();
            foreach($authors as $author)
            {
                
                }
            }
    }

Mais le problème est inverse désormais : comment rajouter une propriété supplémentaire à mes objets $author

Dernière modification par fetard (10-05-2008 01:29:40)

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