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 :

QueryBuilder et jointure automatique


Sujet :

Doctrine2 PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 36
    Points
    36
    Par défaut QueryBuilder et jointure automatique
    Bonjour tout le monde,

    Petite question concernant Doctrine2 (avec SF2).

    J'ai créé un bundle + un repository.
    Dans mon entité, j'ai une relation ManyToOne.
    Entité hn -> Entité gender qui peut correspondre à Male / Femelle / Mixte

    Lorsque, dans mon Repository hn, je fais un "select *" il me retourne bien gender.id mais lorsque je spécifie les champs de mon entité hn, il ne fait plus la jointure.

    Doit-on faire une jointure explicite dans le queryBuilder lorsque l'on sélectionne des champs particuliers ou existe-il une méthode pour qu'il fasse quand même les "jointures" ...

    Me retourne bien gender
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      public function findByLetter($letter)
      {
          $qb = $this->createQueryBuilder('hn');
          $qb->where($qb->expr()->like('hn.name', ':letter'));
          $qb->setParameter('letter', "$letter%");
          $query = $qb->getQuery();
     
          return $query->getResult();
      }
    Ne retourne pas le gender
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public function findByLetter($letter)
      {
          $qb = $this->createQueryBuilder('hn');
          $qb->select('hn.name, hn.enabled');
          $qb->where($qb->expr()->like('hn.name', ':letter'));
          $qb->setParameter('letter', "$letter%");
          $query = $qb->getQuery();
     
          return $query->getResult();
      }
    D'avance merci.

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Quand tu sélectionnes des champs précis, Doctrine ne peut plus te retourner un objet, donc tu ne peux plus le manipuler aussi facilement. Le mieux c'est d'utiliser la première solution, qui te retourne bien un objet, bien plus flexible et propre.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Je te conseille de lire aussi des infos sur le lazy loading de doctrine2

    Ex : http://www.doctrine-project.org/blog...e-lazy-loading

    Cette toute petite notion peut changer le nombre de requêtes générées de façon très importante et donc avoir de gros impacts sur les perfs.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 36
    Points
    36
    Par défaut
    Merci !

    Effectivement lazy vs. eager loading c'est un truc à savoir

    En fait dans le premier cas, il me fait à chaque fois 2 requêtes pour un objet.

    Après avoir retravaillé un peu la requête :
    Je n'ai sélectionné que les champs utiles à mon template et j'ai rajouté un inner join, ce qui me ramène à ... 1 requête pour sélectionner 18.000 records en 1.03ms.

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

Discussions similaires

  1. [2.x] Querybuilder et jointures
    Par blugeen dans le forum Symfony
    Réponses: 0
    Dernier message: 26/07/2013, 18h42
  2. [oneToOne] Jointures automatiques par Doctrine
    Par Guybrush113 dans le forum Doctrine2
    Réponses: 0
    Dernier message: 28/10/2011, 09h31
  3. mise à jour automatique de table de jointure
    Par bringer dans le forum SQLite
    Réponses: 5
    Dernier message: 09/06/2009, 13h16
  4. génération jointure en automatique
    Par stephyugh dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/12/2007, 21h21
  5. Réponses: 5
    Dernier message: 05/07/2007, 08h53

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