Mise à jour de plusieurs commandes sur la base de deux ID | Query Builder
Bonjour,
Je souhaite mettre à jour le champ "laboratory" de ma table "orders detail" avec le nom du laboratoire qui traite le produit commande.
J'arrive à créer mon array, récupérer les valeurs, mais je n'arrive pas à mettre à jour le champ avec le nom du laboratoire en question.
J'aurais donc besoin de votre expertise, merci d'avance, Marc
Ci-après toutes les infos nécessaires :
Champs de ma table 'orders_detail'
id | orderID | producttypeID | productnameID | laboratory
225 | 206 | 4 | 26 |
226 | 206 | 1 | 1 |
Le champ à mettre à jour est le champ 'laboratory'
- Une commande peut contenir plusieurs produits, comme on peut le voir en observant le champ 'orderID'. La commande '206' comporte 2 produits.
- Chaque produit est élaboré dans un laboratoire spécifique (par ex. Cuisine, Boulangerie, Traiteur etc.).
- 3
Dans mon cas, je devrais renseigner ce champ avec le laboratoire respectif, ce qui donnerait :
id | orderID | producttypeID | productnameID | laboratory
225 | 206 | 4 | 26 | Cuisine
226 | 206 | 1 | 1 | Boulangerie
Je génère donc une array avec la requête suivante pour récupérer le type de produit 'producttypeID' et le laboratoire 'laboratory' :
Code:
1 2 3 4 5 6 7 8 9 10
|
/* QUERY */
/* GET THE LABORATORY(-IES) */
$laboratory = DB::table('orders_detail')
->join('laboratories','orders_detail.producttypeID', '=', 'laboratories.id')
->select('orders_detail.producttypeID','laboratories.laboratory')
->where('orderID', '=', $id)
->get('laboratory');
/* dd($laboratory); */ |
Array retournée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Collection {#3639 ▼
#items: array:2 [▼
0 => {#3636 ▼
+"producttypeID": 4
+"laboratory": "Cuisine"
}
1 => {#3637 ▼
+"producttypeID": 1
+"laboratory": "Boulanger"
}
]
} |
Je souhaite mettre à jour ma table avec la requête suivante :
Code:
1 2 3 4 5
|
DB::table('orders_detail')
->where('orders_detail.orderID', '=', $id)
->where('orders_detail.producttypeID',$laboratory['producttypeID'])
->update(['laboratory'=> $laboratory]); |
le no de commande ('orderid') doit être égal a l'ID de la commande créée et insérée dans la table "orders".
Le no du type de produit ('producttypeid') doit être égal à la valeur "producttypeid" retournée par mon array.Si c'est le cas alors le champ "laboratory" doit être mis à jour de la manière suivante ;
Code:
1 2 3 4 5
|
id | orderID | producttypeID | productnameID | laboratory
225 | 206 | 4 | 26 | Cuisine
226 | 206 | 1 | 1 | Boulangerie |
si je teste la derniere requete ci-dessus, elle me retourne bien l'ID, mais aucune valeur 'producttypeID'.
Mon souci doit donc être dans la manière dont je récupère ma valeur de l'array ;
->where('orders_detail.producttypeID',$laboratory['producttypeID'])
Mais aussi dans la manière de mettre à jour le champ en question avec ;
->update(['laboratory'=> $laboratory]);