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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 //récupére les catégories de l'oeuvre consultée $lOeuvre = $oeuvre->find($id)->current(); $this->view->categories = $lOeuvre->findCategorieViaCategorise();
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 :
La classe gérant le modéle Oeuvre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 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(); } }
Classe gérant le modéle categorise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?php class Oeuvre extends Zend_Db_Table{ protected $_name = "oeuvre"; protected $_dependentTables = array('Ecrit', 'Categorise'); } ?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?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') ); } ?>
Partager