如何使用laravel eloquent从数组数据更新sql中的多行

时间:2018-02-12 11:14:27

标签: php mysql laravel

我尝试使用laravel eloquent更新数据库中的多条记录,但在尝试使用数组进行更新时遇到错误。

我不确定如何正确地将数据从数组中获取到我的更新函数。

我传递的数组看起来像这样。

enter image description here

我的数据库表格如

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'在更新中设置。

3 个答案:

答案 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']);
}