我尝试使用laravel eloquent更新数据库中的多条记录,但在尝试使用数组进行更新时遇到错误。
我不确定如何正确地将数据从数组中获取到我的更新函数。
我传递的数组看起来像这样。
我的数据库表格如
id | checklistid | categoryid |是检查| created_at |的updated_at
我的控制器看起来像这样。
public function updateCategoryListData(Request $request){
$checklistdata = $request->get('checklist');
$id = $request->get('checklistid');
$dataset = [] ;
foreach($checklistdata as $key =>$value){
$dataset[] = ['checklistid'=>$id,'categoryid' => $key,'isCheck'=>$value];
}
categorylistcontent::where([['checklistid',$id], ['categoryid', $dataset=>['categoryid'] ]])
->update($dataset['isCheck']);
}
您是否可以建议我如何使用数组来获得“检查”功能。和' categoryid'要用作更新语句的where子句,然后使用' isCheck'在更新中设置。
答案 0 :(得分:1)
您不需要dataset
数组,而是执行以下操作:
foreach($checklistdata as $key =>$value){
categorylistcontent::where('checklistid',$id)->where('categoryid',$key)
->update(['isCheck'=>$value]);
}
答案 1 :(得分:1)
您只能使用一个查询来执行此操作,但您可以使用两个查询执行此操作。一个例子:
$check = categorylistcontent::query();
$notCheck = categorylistcontent::query();
foreach ($request->checklist as $item) {
$query = $item['isCheck'] === 1 ? 'check' : 'notCheck';
$$query->orWhere(function($q) use($item) {
$q->where('checklistid', $item['checklistid'])->where('categoryid', $item['categoryid']);
}
}
$check->update(['check' => 1]);
$notCheck->update(['check' => 1]);
我还没有测试过这个确切的代码,但我认为这对你有所帮助。
答案 2 :(得分:0)
您需要通过将其放入foreach循环来更新多行
例如:
foreach($checklistdata as $key =>$value){
$dataset[] = ['checklistid'=>$id,'categoryid' => $key,'isCheck'=>$value];
categorylistcontent::where([['checklistid',$id], ['categoryid', $dataset=>['categoryid'] ]])
->update($dataset['isCheck']);
}