![](/img/trans.png)
[英]How to apply values from array and update rows using Laravel Eloquent?
[英]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.