Requête ne retourne pas le bon résultat

a marqué ce sujet comme résolu.

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.

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 ?

+0 -0

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

+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.

+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 ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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