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

Php 如何使用laravel eloquent从数组数据更新sql中的多行,php,mysql,laravel,Php,Mysql,Laravel,我试图使用laravel eloquent更新数据库中的多个记录,但在尝试使用数组更新时出错 我不确定如何正确地将数据从数组中获取到更新函数 我正在传递的数组如下所示 public function updateCategoryListData(Request $request){ $checklistdata = $request->get('checklist'); $id = $request->get('checklistid'); $dataset

我试图使用laravel eloquent更新数据库中的多个记录,但在尝试使用数组更新时出错

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

我正在传递的数组如下所示

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

我的数据库表看起来像

id | checklistid | categoryid | isCheck |创建|更新|在

我的控制器看起来像这样

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

您能否建议我如何使用数组获取“checklistid”和“categoryid”以用作update语句的where子句,然后在更新中设置“isCheck”。

您不需要
数据集
数组,而是执行以下操作:

foreach($checklistdata as $key =>$value){
    categorylistcontent::where('checklistid',$id)->where('categoryid',$key)
        ->update(['isCheck'=>$value]);
}

您不能只使用一个查询来实现这一点,但可以使用两个查询来实现这一点。例如:

$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]);

我还没有测试过这段代码,但我认为这将有助于您了解这一点。

您需要通过将其放入foreach循环来更新多行

例如:


我要传递的数组看起来像这样
你指的是哪个数组啊,我从来都不知道拉威尔在你更新时能自动读取数组。非常感谢。我会尝试这种方法,谢谢!如何像这样更新<代码>ID:array(size=3)0=>int31=>int12=>int2值:array(size=3)0=>float01=>float02=>float0