Hello,
Je refais du Symfony après un peu de temps hors de ce framework.
J'ai un tableau de produits (chaque produit peut appartenir à un seul package mais un package peut contenir de un à plusieurs produits) et je veux déclencher un COUNT (des produits compatibles gauchers) et je trie les package par ordre décroissant de produits adaptés aux gauchers.
En gros, un endpoint comme cela :
Le problème est que comme le montre le json du dessus, je n'ai plus que 2 lignes qui apparaissent (chacune est le premier produit composant le package indiqué) mais je veux l'ensemble des produits qui composent chaque package (toujours dans l'idée de générer un endpoint global qui renvoie toutes les data) donc avec les produits id 2, 3 , 4, ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 [ { "0": { "id": 9, "packageId": 2, "prodId": 8, "quantity": 14, "lefthanded": true }, "sumProduitGaucher": "5" }, { "0": { "id": 1, "packageId": 1, "prodId": 1, "quantity": 14, "lefthanded": true }, "sumProduitGaucher": "2" } ]
J'ai essayé :
J'ai ausi esssayé le INNER JOIN (dans le doute), mais ne maitrise pas l'écriture sur DQL, et la doc ne m'a pas aidé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public function findAllOrderByGaucher(): array { $qb = $this->createQueryBuilder('p') ->select('p, COUNT(p.prodId) AS countProd', 'p2', 'WITH', 'p2.id = :id') ->where('p.gaucher = 1') ->groupBy('p.prodId') ->groupBy('p.packId') ->orderBy('countPack', 'ASC') ; $query = $qb->getQuery(); // dd ($query->execute()); return $query->execute(); }
Est ce que la méthode est bonne?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public function findAllOrderByGaucher(): array { $qb = $this->createQueryBuilder('p') ->select('p') ->innerJoin('COUNT(p.prodId) AS countProd', 'p2', 'WITH', 'p2.id = :id') ->where('p.id = :id') ->where('p.gaucher = 1') ->groupBy('p.prodId') ->groupBy('p.packId') ->orderBy('countPack', 'ASC') ; $query = $qb->getQuery(); // dd ($query->execute()); return $query->execute(); }
Est ce que c'est possible d'avoir un COUNT et d'afficher toutes les lignes?
Merci
PS:
Dans mon exemple, j'ai copié coller l'ensemble des données pour que cette table soit indépendante (je sais qu'il y'aura des risques de doublons et des incohérences) mais je n'ai pas accès aux autres tables et m'entraine pour générer un endpoint uniquement à partir de cette table.
Partager