Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous !
j'ai suivi les différents tutos proposés ici ainsi que certains ailleurs, je me suis pas mal documenté avec la doc du site officiel, mais je bute sur un point.
Pour indication je travaille avec le Zend Framework dernière version du 0.9 (0.9.2 ou 0.9.3 je ne sais plus où on en est).
Pour faire mon projet, une gestion d'oeuvre littéraires en ligne, j'ai pris pour base le tuto suivant :
Débuter avec le Zend Framework (approche MVC)
J'ai 3 tables :
oeuvre(id, titre, description,statutmodo)
categorise(id, id_oeuvre, id_categogie)
categorie(id, libelle)
J'ai poussé plus loin le tuto en intégrant les dépendances des tables dans les classes et j'arrive tres bien à faire une "jointure" en utilisant la méthode findClassViaAutreClass
exemple de récupération de la catégorie d'une oeuvre:
//récupére les catégories de l'oeuvre consultée $lOeuvre = $oeuvre->find($id)->current(); $this->view->categories = $lOeuvre->findCategorieViaCategorise();
Ca marche, quand on veut le détail d'UNE oeuvre c'est niquel ! Mais ca ne fonctionne que si j'ai UN SEUL RESULTAT, et à un moment j'affiche une liste d'oeuvre (donc un JEU DE RESULTAT) et j'aimerais indiquer le(s) genre(s) de chaque oeuvre.
Comment faire ? Je ne vais quand meme pas boucler sur chaque oeuvre et faire à chaque fois un findCategorieViaCategorise ? Ca va multiplier de maniéres beaucoup trop importantes le nombre de requêtes à la base, si je veux afficher 20 oeuvres, ca voudrais dire que je dois faire 20 requetes à la base !
Y a pas une maniére plus économique ? Plus propre de faire ?
J'ai essayé pas mal de chose, mais je séche désespérement
Pour détailler voici le reste de mon code important pour la situation :
Le contrôleur de Oeuvre :
class OeuvreController extends Zend_Controller_Action{ //methode execute a chaque construction de l'objet function init(){ $this->initView(); $this->view->baseUrl = $this->_request->getBaseUrl(); Zend_Loader::loadClass('Oeuvre'); } //la fonction qui est censé me renvoyer une liste d'oeuvre avec le genre function indexAction(){ $this->view->title = "Liste des oeuvres"; $oeuvre = new Oeuvre(); $this->view->oeuvres = $oeuvre->fetchAll("statutmodo = 1"); $this->render(); } }
La classe gérant le modéle Oeuvre
<?php class Oeuvre extends Zend_Db_Table{ protected $_name = "oeuvre"; protected $_dependentTables = array('Ecrit', 'Categorise'); } ?>
Classe gérant le modéle categorise
<?php class Categorise extends Zend_Db_Table{ protected $_name = "categorise"; protected $_dependentTables = array('Oeuvre', 'Categorie'); protected $_referenceMap = array ( 'definit' => array ( 'columns' => array('id_categorie'), 'refTableClass' => 'Categorie', 'refColumns' => 'id'), 'genre' => array ( 'columns' => array('id_oeuvre'), 'refTableClass' => 'Oeuvre', 'refColumns' => 'id') ); } ?>[b][/b]
Dernière modification par touff5 (05-06-2007 12:53:56)
Hors ligne
J'ai appris qu'on ne pouvait pas faire plus économe sans coder soi même sa fonction.
Merci
Hors ligne
En effet
Hors ligne
Pages: 1