Symfony 4.4 - requête de SUM et appel depuis twig

Par CalvinHobbes, il y a 5 ans


Bonjour,

Je suis en train de me former sur Symfony et ai testé les API REST pour voir.
Mais là, je me suis reconcentré sur Symfony et j'ai un Repository qui regroupe mes requêtes DQL et j'ordonne par stock restant mais comme tout ces produits sont compatibles entre eux et peuvent générer un "pack", j'ai aussi testé de compter par produit adapté aux gauchers.

public function countGaucher() { return $this->createQueryBuilder('p') ->select("COUNT(p.id)") ->where("p.gaucher = 1") ->getQuery() ->getSingleScalarResult(); } public function findAllOrderByGaucher(): Response { $this->countGaucher(); $qb = $this->createQueryBuilder('p') ->where('p.commandeId = :commandeId') ->setParameter('gaucher', $gaucher) ->orderBy('p.gaucher', 'DESC'); $query = $qb->getQuery(); return $query->execute();

J'aimerais compter les produits adaptés aux gauchers et dans un 2nd temps pouvoir ordonner par produits adaptés aux gauchers MAIS aussi les produits réservés aux droitiers

La requête SQL sur CMD fonctionne mais aucun tri n'est fait sur TWIG (j'ai toujours l'affichage du + petit stock au + grand).
Merci d'avance pour juste un coup de main dans la bonne direction

5 réponses

bidule, il y a 5 ans

Salut,

Voici un exemple sur un sum mais le count fonctionne à l'identique, n'oubli pas de nommer chaque count afin de pouvoir faire ton tri et ton affcihage sous Twig

return $this->createQueryBuilder('c') ->select('sum(c.montantEspece) as totalEspece, sum(c.montantCheque) as totalCheque, sum(c.montantCarte) as totalCarte, week(c.DateEntree,1) as semaine') ->where('c.DateEntree BETWEEN :dateDebut AND :dateFin') ->setParameter('dateDebut', $dateDebut->format('Y-m-d')) ->setParameter('dateFin', $dateFin->format('Y-m-d')) ->orderBy('c.DateEntree', 'DESC') ->getQuery() ->getResult() ;
CalvinHobbes, il y a 5 ans

Hello bidule,
merci, je vois, je peux donc faire les calculs de sum et de count directement dans le querybuilder.
Mais par contre, j'ai un souci quand je le fais car cette opération car ce champs "countProduct" n'existe pas dans la table:

public function findAllOrderByGaucher(): array { $qb = $this->createQueryBuilder('p') ->select('COUNT(p.id) as countProduct') ->orderBy('p.countProduct', 'ASC') ->getQuery() ->getResult(); $query = $qb->getQuery(); dd($query); return $query->execute(); }

cela me sort: HTTP 500 Internal Server Error
[Semantical Error] line 0, col 98 near 'countProduct': Error: Class App\Entity\Product has no field or association named countProduct

Dois je créer une colonne à ce nom? Cela me paraitrait bizarre car ces calculs sont temporaires.

Merci

bidule, il y a 5 ans

L'ORDERBY doit être fait sur "countProduct" et non sur "p.countProduct"

CalvinHobbes, il y a 5 ans

Ah oui :) Mince mais maintenant j'ai ce message: Key "id" for array with keys "countGaucher" does not exist.
J'ai essayé de virer mes variables dans le twig pour tester mais rien n'y fait.
Faut que je m'améliore sur Symfony...

bidule, il y a 5 ans

Salut,

Le problème dan sta requête c'est que ne cherche QUE le nombre donc tu n'as qu'une colonne, pour faire un GroupBy il faut au moins 2 colonnes ;)

Sinon pas besoin de GroupBy