J'essaye de faire une requête avec group by mais j'obtient une erreur

        return $this->createQueryBuilder('av')
            ->where('av.dateAssur between :val1 and :val2')
            ->setParameter('val1', $value1)
            ->setParameter('val2', $value2)
            ->groupBy('av.vehicule')
            ->getQuery()
            ->getResult()
        ;

Ce que je veux

Aidez moi à résoudre le problème s'il vous plaît

Ce que j'obtiens

An exception occurred while executing a query: SQLSTATE[42803]: Grouping error: 7 ERREUR: la colonne « a0_.id » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat

3 réponses


L'erreur dit que tu essaies de faire un GROUP BY, mais qu'un des éléments (d'après la requête, j'ai envie de dire tous), doivent être mis soit dans le GROUP BY, soit dans une fonction d'agrégat (COUNT, SUM, MIN, MAX, AVG), soit être retirée de la requête.

Voici le genre de requête générée

SELECT id, name, vehicule
WHERE dateAssur BETWEEN :val1 and :val2
GROUP BY vehicule

Et SQL voudrait quelque chose comme ceci :

SELECT id, name, vehicule
WHERE dateAssur BETWEEN :val1 and :val2
GROUP BY vehicule, id, name

----

SELECT vehicule, COUNT(id)
WHERE dateAssur BETWEEN :val1 and :val2
GROUP BY vehicule

----

SELECT vehicule
WHERE dateAssur BETWEEN :val1 and :val2
GROUP BY vehicule

Mon probleme c´est de savoir comment l´écrire en symfony repository createQueryBuilder et non en sql simple.
Merci

Je ne connais pas Symfony et Doctrine plus que ça, mais quelque chose comme ça devrait fonctionner :

return $this->createQueryBuilder('av')
    ->select('av.vehicule')
    ->where('av.dateAssur between :val1 and :val2')
    ->setParameter('val1', $value1)
    ->setParameter('val2', $value2)
    ->groupBy('av.vehicule')
    ->getQuery()
    ->getResult();