Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2007, 10h53   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 36
Points : 10
Points : 10
Par défaut Jointure de type n à n en utilisant le mapping

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:
Code :
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();
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 :
Code :
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();
}
}
La classe gérant le modéle Oeuvre
Code :
1
2
3
4
5
6
7
8
<?php
class Oeuvre extends Zend_Db_Table{
	protected  $_name = "oeuvre";
 
	protected $_dependentTables = array('Ecrit', 'Categorise');
 
}
?>
Classe gérant le modéle categorise
Code :
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') 
				);
}
?>
touff5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 11h09   #2
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Tu as du deja le faire mais tu as regarder la doc ?
http://framework.zend.com/manual/en/...g.many-to-many
__________________
If it's not broken, don't fix it.
BiliBa Built on top of Zend Framework
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 11h09   #3
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
Nop, on ne peut pas faire plus économe, sans mettre la main à la pâte
Il faut dans ton cas écrire toi même la requête qui va réaliser la jointure, et récupérer les jeux de résultats dans les collections directement.

Je précise que dans un developpement web, c'est très souvent le cas. Les built-in fonctionnalités de ZF sont là pour les cas tous simples, dans la grande majorité des cas, il y a necessité d'écrire soi-même sa logique
__________________
.: Expert contributeur certifié PHP/ZF :.
Mes articles - Twitter - GitHub
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 12h56   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 36
Points : 10
Points : 10
D'accord. Merci bien

Je vais rajouter de ce pas une méthode à ma classe Oeuvre pour pouvoir générer une liste d'Oeuvre avec leurs genres.
touff5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web