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
Réponse acceptée

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

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

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

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

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