在Laravel PHP中使用foreach更新字段



我正在尝试根据其唯一字段taskCode更新多行

并将从tbl_projtask更新taskWeight的字段

我有这个2可变

  1. $request->dataWeight该变量来自ajax请求,该请求包含类似于95,75,65的内容,该值用逗号分隔。

  2. $request->dataWeightAttr该变量来自ajax请求,该请求包含类似于TaskCode1, TaskCode2, TaskCode3的内容

在我的MainController.php

我有这个代码

$myString = $request->dataWeightAttr;
foreach($myString as $value){
DB::table('tbl_projtask')
->where('taskCode', $value)
->update([
'taskWeight'=> $request->dataWeight,
'by_id'=> auth()->user()->id,
'updated_by'=> auth()->user()->name,
'updated_at' => now()
]);
}

正如你在我的update代码中看到的那样

我使用request->dataWeightAttr来查找哪些行应该更新,$request->dataWeight是特定taskCode的值

我这样做对吗?

将字符串转换为数组

$dataWeight = explode(',',$request->dataWeight); // convert to array
$dataWeightAttr = explode(',',$request->dataWeightAttr); // convert to array 

假设两个数组中都有相关的值。

foreach($dataWeightAttr as $key => $value){
DB::table('tbl_projtask')
->where('taskCode', $value)
->update([
'taskWeight'=> $dataWeight[$key],
'by_id'=> auth()->user()->id,
'updated_by'=> auth()->user()->name,
'updated_at' => now()
]);
}

如果您想更新相同的字段但不同的id,可以使用whereIn而不是foreach。

DB::table('tbl_projtask')
->whereIn('taskCode', $request->dataWeightAttr)
->update([
'taskWeight'=> $request->dataWeight,
'by_id'=> auth()->user()->id,
'updated_by'=> auth()->user()->name,
'updated_at' => now()
]);

最新更新