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

Symfony PHP Discussion :

[Doctrine] Requêtes imbriquées


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut [Doctrine] Requêtes imbriquées
    Bonjour à tous,

    Mon problème parle de Doctrine mais je pense qu'il a plus sa place dans le forum Symfony2 que dans le forum ORM, car je pense que en pratique les utilisateurs de Doctrine se trouvent plutôt ici

    J'ai une question qui me trotte dans la tête depuis un petit bout de temps. Voilà la situation : je dispose d'un objet User qui a possède une relation Like ManyToMany auto-référencée (en français : un utilisateur peut liker n'importe quel nombre d'utilisateurs, et se faire liker par n'importe quel nombre d'utilisateurs).

    Imaginons que je veux résoudre le problème suivant :
    Pour un utilisateur donné, trouver ses likes réciproques, c'est-à-dire les personnes qui le likent et qu'il like en retour.

    En SQL, voilà comment j'aurais procédé, à l'aide d'une requête imbriquée (avec comme id d'utilisateur 41) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT l1.liked_id FROM likes l1 
    WHERE l1.liked_id IN 
         (SELECT l2.user_id FROM likes l2 WHERE l2.liked_id=41)
    AND l1.user_id=41;
    Or Doctrine travaillant avec des objets, il me semble impossible d'arriver au même résultat en utilisant le DQL. La solution que j'ai trouvée est bien sûr de régler ça en PHP, mais je trouve ça beaucoup moins propre étant donné que SQL est là pour récupérer ce que l'on veut de la base de données, on n'est pas censé faire un bout de requête en SQL puis filtrer en PHP !

    J'aimerais donc savoir si vous avez été déjà confrontés à des cas de ce genre, si vous avez une solution ou si c'est là une limitation de Doctrine. Je réfléchis fortement à abandonner Doctrine dans mes projets Symfony2 et à utiliser PDO en tant que service à la place... En effet dans certains cas le gain de temps est notable, mais sur des requêtes précises je n'en ai pas l'impression.

    Merci d'avance de votre retour, bonne journée !

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 98
    Points : 163
    Points
    163
    Par défaut
    je crois que cette partie de la doc doit aider pour bien mapper
    ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $query = $this->getEntityManager()
                            ->createQuery('
                                select li
                                from Entities\liked li
                                inner join li.likedME li2
                                where li2.id= ?1');
    C'est une queryBuilder, je n'ai pas le temps de tester en détail, mais normalement avec l'innerJoin sa doit bien rendre

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut
    Alors attention, j'ai oublié de préciser : la table "likes" est une table qui est créée par mon association ManyToMany, elle ne représente en rien un objet concret de mon site.
    C'est pourquoi Entity\Likes n'existe pas.

    De plus le mapping fonctionne correctement, c'est plus au niveau de la méthodologie que je me questionne...

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 98
    Points : 163
    Points
    163
    Par défaut
    J'ai un peu de mal à comprendre ton architechture, sans diagramme de classe, ni classe, c'est pas simple, je te propose d'expliquer une nouvelle fois en étant le plus clair possible

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Points : 77
    Points
    77

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    Essaie avec IN , NOT EXISTS ou NOT MEMBER
    http://docs.doctrine-project.org/en/...-language.html

    SELECT u FROM User u
    WHERE :user MEMBER OF u.likedUsers
    OR :user MEMBER OF u.likeUsers

Discussions similaires

  1. [Doctrine] Requête imbriquée impossible
    Par kawa67 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 25/11/2011, 15h23
  2. [Doctrine][Symfony1.4] Requêtes imbriquées
    Par Benjamin GAGNEUX dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/10/2011, 17h45
  3. [Doctrine] Requête imbriquée
    Par drooss dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/05/2011, 10h55
  4. Réponses: 2
    Dernier message: 24/03/2011, 18h10
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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