[Doctrine] Jointure multiple sur la même table
bonjour à tous,
alors mon petit problème avec Doctrine.
j'ai troistables dans ma base :
utilisateur
-----------
idutilisateur
nom
prenom
email
article
------------
idcontenu
detail
contenu
-----------
idcontenu
titre
publie
datecreation
datemodification
idutilisateurcreation
idutilisateurmodification
dans la table contenu j'ai deux clé étrangères vers la table utilisateur sur idutilisateurcreation et idutilisateurmodification.
voici la requête doctrine que j'exécute pour obtenir les données de l'article avec celles de son contenu et des utilisateurs ayant intervenu.
Code:
1 2 3 4 5 6 7
| $q = Doctrine_Query::create()
->select('a.*, c.*, uCrea.*, uModif.*')
->from('Articles a')
->leftJoin('a.Contenus c')
->leftJoin('c.Utilisateurs uCrea ON uCrea.idutilisateur=c.idutilisateurcreation')
->leftJoin('c.Utilisateurs uModif ON uModif.idutilisateur=c.idutilisateurmodification')
->where('a.idcontenu=?', $idcontenu); |
voici la requête SQL générée
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
SELECT
a.idcontenu AS a__idcontenu, a.detail AS a__detail,
c.idcontenu AS c__idcontenu, c.titre AS c__titre, c.publie AS c__publie, c.datecreation AS c__datecreation, c.datemodification AS c__datemodification, c.idutilisateurcreation AS c__idutilisateurcreation, c.idutilisateurmodification AS c__idutilisateurmodification,
u.idutilisateur AS u__idutilisateur, u.email AS u__email, u.nom AS u__nom, u.prenom AS u__prenom,
u2.idutilisateur AS u2__idutilisateur, u2.email AS u2__email, u2.nom AS u2__nom, u2.prenom AS u2__prenom
FROM
articles a LEFT JOIN contenus c ON a.idcontenu = c.idcontenu
LEFT JOIN utilisateurs u ON (u.idutilisateur = c.idutilisateurcreation)
LEFT JOIN utilisateurs u2 ON (u2.idutilisateur = c.idutilisateurmodification)
WHERE
(a.idcontenu = ?) |
la requête SQL générée remonte bien toutes données attendus, u et u2 correspondant respectivement à l'utilisateur création et à l'utilisateur modification.
par contre lorsque j'exécute la version DQL et que j'affiche le résultat sous forme de tableau, seul les données de l'utilisateur création sont remontées :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Array
(
[idcontenu] => 2
[detail] => detail
[Contenus] => Array
(
[idcontenu] => 2
[titre] => article 1
[publie] => 0
[datecreation] => 2010-04-20 00:00:00
[datemodification] => 2010-04-20 00:00:00
[idutilisateurcreation] => 1
[idutilisateurmodification] => 2
[Utilisateurs] => Array
(
[idutilisateur] => 1
[email] => toto@gmail.com
[nom] => mobile
[prenom] => toto
)
)
) |
si quelqu'un a déjà manipulé ce genre de requête avec Doctrine et qu'il a trouvé comment faire pour avoir toutes les données je suis à votre écoute :ccool:.