Bonjour,
Depuis quelques temps je me questionne sur un comportement de Doctrine, et n'arrivant pas à trouver de résultat, je me permets de vous demander votre avis.
Sur mon application, je suis souvent amenés à faire des requêtes qui ont la forme suivante :
On veut donc récupérer les commentaires des articles dont le rédacteur répond à une certaine condition. On part de la table commentaire ( car on veut obtenir une collection de commentaires à la fin ), puis on la join à tous les articles puis à tous les rédacteurs, et enfin on réduit les résultat avec la condition.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $coms = Doctrine_Core::getTable('Commentaire') ->createQuery('c') ->join('c.article a') ->join('a.Redacteurs r') ->where('r.quelquechose = ?', $quelquechose);
Cette requête serait beaucoup plus optimisée avec les jointures dans cet ordre :
De cette manière, le nombre de tuples manipulés par les jointures est beaucoup plus réduit, vu que la restriction sur le rédacteur va s'effectuer dés le début.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $coms = Doctrine_Core::getTable('Redacteur') ->createQuery('r') ->select('c.*') ->join('r.Article a') ->join('a.Commentaires c') ->where('r.quelquechose = ?', $quelquechose);
Le problème est que de cette manière, j'obtient un magnifique :
Existe-t'il une solution pour garder cet ordre dans les jointures et obtenir tout de même une collection doctrine d'objets commentaire ?The root class of the query (alias r) must have at least one field selected.
Merci !
Partager