Requête ne retourne pas le bon résultat

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous,

j'ai écrit une requête qui grâce au QueryBuilder qui ressemble à ceci :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$query = $this->_em->createQueryBuilder()
                ->select('p')
                ->from($this->_entityName, 'p')
                ->leftJoin('p.services', 'ps')
                ->leftJoin('ps.members', 'mps')
                ->where('mps.member = :member')
                ->groupBy('p.id, mps.date')
                ->orderBy('mps.date', 'ASC')
                ->setParameter('member', $member)
                ->getQuery();

Si je l'éxecute, 3 objets me sont retourné.

Si j'imprime la requête en faisant $query->getSQL(); , que je la copie/colle dans la console de mysql, j'obtiens 4 objets (ce qui est le bon résultat).

Je remarque donc que si j'attends les objets A:id:1 A:id:2 A:id:3 A:id:1, Doctrine me supprime le dernier.

J'ai testé en remplaçant la ligne du select par ->select('p.name'), j'obtiens bien mes 4 objets.

Est-ce qu'il y a un option à passer pour lui indiquer que je souhaite avoir tout les résultats ou est-ce un bug de Doctrine ?

Merci à tous.

+0 -0

Salut !

Je pense que c'est normal, dans la mesure où tu regroupes par ID de pack et par date de membre. D'ailleurs, ce ne devrait pas plutôt être la date de souscription d'un membre à un pack/service, au lieu de la date d'un membre ? Cette date, c'est celle d'inscription ? La dernière à laquelle il a souscrit un pack ?

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0
Auteur du sujet

Je pourrai vous montrer la requête que ce soir.

La date est bien celle de la souscription au pack. Elle est différente dans mon cas, donc comme je groupe par id et par date, j'ai bien 2 résultats différents (ce que me retourne la requête exécutée directement via le client mysql).

Edit : Voici la requête : SELECT p0_.id AS id_0, p0_.name AS name_1, p0_.price AS price_2, p0_.image AS image_3, p0_.description AS description_4 FROM Pack p0_ LEFT JOIN PackService p1_ ON p0_.id = p1_.pack_id LEFT JOIN MemberPackService m2_ ON p1_.id = m2_.pack_service_id WHERE m2_.member_id = ? GROUP BY p0_.id, m2_.date ORDER BY m2_.date ASC

Édité par Freeza

+0 -0

Est-ce que tu pourrais nous sortir les tuples p0_.id, p1_.id, m2_.id que te ressort la requête dans phpMyAdmin ?

Je soupçonne que, pour une raison ou pour une autre, Doctrine se rend compte qu'elle en a deux qui, du point de vue des retours qu'elle doit fournir, sont similaires et les fusionne.

Édité par Ymox

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0
Auteur du sujet

Oui c'est bien doctrine qui fusionne les objets, si je fais un getScalarResult(), j'obtiens bien mes 4 résultats. Je cherche en vain une solution sur le web, mais rien. Je vais devoir construire mes objets à la main, bof bof.

+0 -0

Pourquoi récupérer uniquement les packs (si c'est bien l'entité avec l'alias p), alors que tu pourrais les récupérer depuis l'utilisateur ? Tu es en train de faire s'afficher les packs de l'utilisateur courant, ou ceux d'un utilisateur qu'on peut voir en étant administrateur ?

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte