IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Doctrine2 PHP Discussion :

Jointure exécutée mais non utilisée


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut Jointure exécutée mais non utilisée
    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,

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,
    Dans ta requete tu fais des jointures mais tu ne précise pas quelles entités tu veux récupérer.
    par défaut il ne récupére que l'entité dont l'alias est "e"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function findAllNoepisodeDescJoinVersion() {
            return $this->createQueryBuilder('e')
                        ->addSelect('v,ec,c')
                        ->leftjoin('e.versions', 'v')
                        ->leftjoin('v.caracteristiques', 'ec')
                        ->leftJoin('ec.caracteristique', 'c')
                            ->addOrderBy('e.noEpisode', "DESC")
                            ->addOrderBy('c.name', "ASC")
                            ->getQuery()
                            ->getResult();
     
        }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    Effectivement, cela fonctionne mieux. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2011, 17h30
  2. Réponses: 11
    Dernier message: 21/07/2010, 09h42
  3. Réponses: 7
    Dernier message: 22/10/2007, 13h37
  4. [POO] [IE] Images invisibles mais propriétés non utilisables sous IE
    Par laurent_m dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/09/2007, 22h54
  5. Erreur à l'exécution dans l'Edi mais non en dehors.
    Par defluc dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/06/2007, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo