簡體   English   中英

如何使用laravel eloquent從數組數據更新sql中的多行

[英]How to update multiple rows in sql from array data using laravel eloquent

我試圖使用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']);
}

您是否能夠建議我如何使用數組來獲取'checklistid'和'categoryid'作為update語句的where子句,然后在更新中設置'isCheck'。

您不需要dataset數組,而是執行以下操作:

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循環中來更新多行

例如:

foreach($checklistdata as $key =>$value){
$dataset[] = ['checklistid'=>$id,'categoryid' => $key,'isCheck'=>$value];

categorylistcontent::where([['checklistid',$id], ['categoryid', $dataset=>['categoryid'] ]])
            ->update($dataset['isCheck']);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM