Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour a tous,
J'ai commencé ZF depuis peu et j'ai une question concernant les références.
Considérons trois simples tables : Category, Langues et users.
Table category
[id] | [name] --------------------- 1 | Catname1 2 | Catname2 3 | Catname3 4 | Catname4
Table langue
[id] | [name] --------------------- 1 | French 2 | English
Table users
[id] | [name] | cat_id | lang_id ------------------------------------------------ 1 | Uname1 | 2 | 1 2 | Uname2 | 4 | 2
Bon vous aurez compris les relations ...
Jusqu'a aujourd'hui que ce soit avec le Zend Framework ou sans, si je veux lister mes users avec les libellés des langues et des catégories j'utilise un bon vieux JOIN.
Par exemple ici ca donnerai :
SELECT users.id, users.name, langue.name, category.name FROM users LEFT JOIN langue ON langue.id = users.lang_id LEFT JOIN category ON category.id = users.cat_id
Hors j'ai vu cette histoire de $_referenceMap. Alors je voulais savoir si dans un cas comme le mien, utiliser des JOIN est "has been" ou plutot conseillé ?
Merci de vos lumières.
Seb.
Dernière modification par Seubeu (23-10-2009 11:28:40)
Hors ligne
Salut,
Une requête unique avec jointures sera bien plus performante que le chargement de dépendances de Zend.
Pour un seul user ça représente 3 requêtes différentes dans la base.
$user = $userTable->find(1)->current(); $lang= $user->findDependentRowset('lang'); $category = $user->findDependentRowset('category');
Le lazy load est utile lorsque la dépendance est utilisée exceptionnellement. Dans le cas où elles sont nécessaires dès le départ et qu'en plus les collections correspondantes sont conséquentes, il n'est pas conseillé d'utiliser le lazy load et de récupérer les résultats en une seule requête avec Jointure.
Cependant, dans le cas d'applications à faible charge ce n'est pas gênant.
A+ benjamin.
Dernière modification par Delprog (23-10-2009 11:12:08)
Hors ligne
Pour un seul user ça représente 3 requêtes différentes dans la base.
Ok c'est bien ce qui me semblait.
Merci de ton aide. Je met le sujet en [Résolu] mais si quelqu'un veut ajouter quelques chose ya pas de soucis
A+.
Seb.
Hors ligne