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) :
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 !
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;
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 !
Partager