Bonjour à tous,


J'ai deux tables :

  • user_info : la table des utilisateurs (email, password...)
  • user_profile : la table profil des utilisateurs (nom, prénom)


user_info et user_profile sont reliées entres elles par le champ user_id commun au deux.

J'essaie d'utiliser au maximum les concepts fournis par Zf.
Par exemple, pour la table user_info, j'ai :

  • class UserInfo() : qui représente un enregistrement particulier (c'est l'endroit ou je mets les getters/ setters)
  • class UserInfoMapper() : qui me permet d'effectuer des opérations sur cette table (par exemple enregistrer un objet avec la méthode save, ou hydrater à partir d'un Zend_Db_Row, un objet UserInfo)
  • class DbTable_UserInfo() : qui représente la table (me permet de déclarer la PK etc...)


J'utilise typiquement ces objets comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$user_info_map = new UserInfoMapper();
$user_info = $user_info_map->find(1);

// $user_info sera une instance de UserInfo() et non pas un Zend_Db_Row

Et je voudrais par exemple à partir de user_info récupérer le profil.
En SQL ça donnerait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT *
FROM user_info
JOIN user_profile
ON user_info.user_id = user_profile.user_id
En une requête j'aurais ma liste d'enregistrement.


Maintenant, si je passe par Zend_Db_Relationships et que je déclare les références dans ma DbTable_UserProfile.

Pour avoir les profils je ferais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
$ui = new DbTable_UserInfo();
$rowset = $ui->find(1);
$row = $rowset->current();
 
$profiles = $row->findDependentRowset('DbTable_UserProfile', 'UserInfo');
$profile = $profiles->current();
Mon problème est que Zf ne fait pas de jointure SQL mais fait 2 selects.

Donc pour 3 utilisateurs, j'aurais :
  • Un select * from user_info
  • 3 select * from user_profile


Pour n utilisateurs, j'aurais : 1 + n requêtes. Alors que j'aurais pu faire 1 requête.

C'est sur que pour 3 utilisateurs avec deux table liées, ça semble dérisoire mais sur 4 tables liées, ça monte à : 1 + 4n

Et perso, pour 20 lignes, faire 81 requêtes, c'est chaud :O


Est-ce possible de faire moins ?


Merci beaucoup.
Cdt.