Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
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 :
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
Auto-réponse :
J'arrive à me débrouiller par des join :
$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
Si quelqu'un peut m'éclairer
Dernière modification par fetard (10-05-2008 00:49:01)
Hors ligne
Et dans ma vue, j'arrive à récupérer le membre auteur du blog par :
$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
Finalement je suis passé par une fonction directement dans le modèle :
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
Pages: 1