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
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();