Environnement Laravel 5.7 | PHP 7.3
Je dois créer une requête UPDATE assez complexe.
CONTEXTE
Ma table contient, en autres, les informations suivantes :
un champ id (clé primaire que j'utilise comme no de produit)
un champ orderID qui est le no de commande (une commande peut contenir plusieurs produits)
un champ orderstatusID qui contient le statut de la commande
La requête doit mettre à jour le champ orderstatusID avec la valeur 5 uniquement si tous les produits d'une même commande ont le orderstatusID = 4, si un produit n'a pas le orderstatusID = 4, alors la commande ne peut pas etre archivée et se voir attribuer le orderstatusID "5".
J'ai créé un bouton bulk action dans ma table avec lequel je peux mettre a jour le de la commande ée lorsque les produits de la commande ont toutes = 4.
Je compte avec une première requête combien de produits ont un status différent de 4. Si la requête retourne "0" alors j'exécute ma requête et le status de tous les produits de la commande cochée se voit attribuer "5"
Code : Tout sélectionner
Cela fonctionne et ne doit fonctionner que pour une commande.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if($button_name == 'set_collected' && $statusorderID_4 == 0) { DB::table('orders_detail_new') ->where('statusorderID',4) ->whereIn('orderID',[$orderid]) ->update(['statusorderID' => 5]); CRUDBooster::redirect($_SERVER['HTTP_REFERER'],"La commande a été archivée.","success"); }
PROBLEME
Par contre, je ne vois pas comment pouvoir créer une requête qui loop toutes la table et attribue le orderstatusID = 5 à tous les produits de toutes commandes dont tous les produits ont exclusivement un orderstatusID = 4.
Dans l'exemple de table ci-dessous,
1. Prenons la commande (orderID) 1, nous pouvons voir que les produits de cette commande (productID [1,2,3,4,5] ont tous le orderstatusID = 4), la requete doit mettre à jour le orderstatusID de cette commande avec la valeur "5"
2. Prenons a présent la commande (orderID) 5, nous pouvons voir qu'un produit (productID 16) a un orderstatusID = 3, la requête ne doit pas mettre à jour le orderstatusID de cette commande.
Pour cet exemple de données, la requête devrait mettre à jour le orderstatusID de tous les produits des commandes [1,3,4,6,7,9,10] avec la valeur 5.
TABLE
Merci d'avance pour toute suggestion.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 productID | orderID | orderstatusID 1 | 1 | 4 2 | 1 | 4 3 | 1 | 4 4 | 1 | 4 5 | 1 | 4 6 | 2 | 4 7 | 2 | 4 8 | 2 | 4 9 | 2 | 4 10 | 2 | 3 11 | 3 | 4 12 | 3 | 4 13 | 4 | 4 14 | 5 | 4 15 | 5 | 4 16 | 5 | 3 17 | 6 | 4 18 | 6 | 4 19 | 6 | 4 20 | 6 | 4 21 | 7 | 4 22 | 7 | 4 23 | 7 | 4 24 | 7 | 4 25 | 7 | 4 26 | 8 | 4 27 | 8 | 3 28 | 8 | 4 29 | 8 | 4 30 | 8 | 4 31 | 8 | 4 32 | 9 | 4 33 | 9 | 4 34 | 10 | 4 35 | 10 | 4 36 | 10 | 4 37 | 10 | 4 38 | 10 | 4 39 | 10 | 4 40 | 10 | 4
Partager