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'
  1. Une commande peut contenir plusieurs produits, comme on peut le voir en observant le champ 'orderID'. La commande '206' comporte 2 produits.
  2. Chaque produit est élaboré dans un laboratoire spécifique (par ex. Cuisine, Boulangerie, Traiteur etc.).
  3. 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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]);