Bonjour,
J'ai réalisé une jointure sur 4 entités. Celle-ci est exécutée mais n'est pas utilisé. C'est à dire qu'il l'exécute, mais après il refait toutes les sous requètes.

J'utilise sf2 et twig.
Comment dois-je faire pour qu'il utilise la requète avec la jointure?
Mes entitées sont connectée comme ceci:
Episode 1:n EpisodeVersion 1:n EpisodeCaracteristique n:1 Caracteristique

Remarque les relations fonctionne car j'accède à toutes mes données sur le site.

Repository:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public function findAllNoepisodeDescJoinVersion() {
        return $this->createQueryBuilder('e')
                    ->leftjoin('e.versions', 'v')
                    ->leftjoin('v.caracteristiques', 'ec')
                    ->leftJoin('ec.caracteristique', 'c')
                        ->addOrderBy('e.noEpisode', "DESC")
                        ->addOrderBy('c.name', "ASC")
                        ->getQuery()
                        ->getResult();
 
    }
Action:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public function episodeAction() {
        $em = $this->getDoctrine()->getEntityManager();
        $listeEpisodes = $em
                    ->getRepository('MendrockSagaBundle:Episode')
                    ->findAllNoepisodeDescJoinVersion();
 
        return array(
            'listeEpisodes' => $listeEpisodes,
        );
    }
Template
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
{% for episode in listeEpisodes %}
        ...
        {% for version in episode.versions %}  
               ...
               {% for carac in version.caracteristiques %}  
                        <tr>
                            <td>{{carac.caracteristique.name}}</td>
                            <td>{{carac.pourcentage}}</td>
                        </tr>
               {% endfor %}
               ...
        {% endfor %}
        ...
{% endfor %}

Le résultat du profiler de symfony
Citation Envoyé par Profiler
Queries

SELECT e0_.id AS id0, e0_.no_episode AS no_episode1 FROM episode e0_ LEFT JOIN episode_version e1_ ON e0_.id = e1_.episode_id LEFT JOIN episode_caracteristique e2_ ON e1_.id = e2_.episodeversion_id LEFT JOIN caracteristique c3_ ON e2_.caracteristique_id = c3_.id ORDER BY e0_.no_episode DESC, c3_.name ASC
Parameters: { }
Time: 4.53 ms
SELECT t0.id AS id1, t0.name AS name2, t0.file AS file3, t0.created_at AS created_at4, t0.no_version AS no_version5, t0.description AS description6, t0.ispublic AS ispublic7, t0.episode_id AS episode_id8 FROM episode_version t0 WHERE t0.episode_id = ?
Parameters: [10]
Time: 2.06 ms
SELECT t0.id AS id1, t0.name AS name2, t0.file AS file3, t0.created_at AS created_at4, t0.no_version AS no_version5, t0.description AS description6, t0.ispublic AS ispublic7, t0.episode_id AS episode_id8 FROM episode_version t0 WHERE t0.episode_id = ?
Parameters: [9]
Time: 1.25 ms
SELECT t0.id AS id1, t0.name AS name2, t0.file AS file3, t0.created_at AS created_at4, t0.no_version AS no_version5, t0.description AS description6, t0.ispublic AS ispublic7, t0.episode_id AS episode_id8 FROM episode_version t0 WHERE t0.episode_id = ?
Parameters: [8]
Time: 1.26 ms
SELECT t0.id AS id1, t0.pourcentage AS pourcentage2, t0.episodeversion_id AS episodeversion_id3, t0.caracteristique_id AS caracteristique_id4 FROM episode_caracteristique t0 WHERE t0.episodeversion_id = ?
Parameters: [6]
Time: 1.34 ms
SELECT t0.id AS id1, t0.name AS name2, t0.file AS file3, t0.created_at AS created_at4, t0.no_version AS no_version5, t0.description AS description6, t0.ispublic AS ispublic7, t0.episode_id AS episode_id8 FROM episode_version t0 WHERE t0.episode_id = ?
Parameters: [7]
Time: 1.25 ms
SELECT t0.id AS id1, t0.pourcentage AS pourcentage2, t0.episodeversion_id AS episodeversion_id3, t0.caracteristique_id AS caracteristique_id4 FROM episode_caracteristique t0 WHERE t0.episodeversion_id = ?
Parameters: [5]
Time: 1.22 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [14]
Time: 1.27 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [18]
Time: 1.16 ms
SELECT t0.id AS id1, t0.pourcentage AS pourcentage2, t0.episodeversion_id AS episodeversion_id3, t0.caracteristique_id AS caracteristique_id4 FROM episode_caracteristique t0 WHERE t0.episodeversion_id = ?
Parameters: [4]
Time: 1.20 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [17]
Time: 1.80 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [20]
Time: 2.17 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [21]
Time: 1.58 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [22]
Time: 1.52 ms
SELECT t0.id AS id1, t0.name AS name2 FROM caracteristique t0 WHERE t0.id = ?
Parameters: [19]
Time: 1.49 ms
Pouvez-vous m'expliquer comment résoudre mon problème?
Cordialement,