最初,students表格如下所示。
id | invite_count
-----------------
10 | 5
12 | 0
15 | 1
25 | 0
我正在使用以下代碼更新學生的邀請計數。
Student::whereIn("id", $this->request->studentIds)
->update([
'invite_count' => DB::raw('invite_count 1')
]);
但是根據我的要求,我可以在$this->request->studentIds陣列中多次使用相同的 id,例如 [10, 15, 12, 10, 25, 12]。
在移動時,輸出如下所示。
id | invite_count
-----------------
10 | 6
12 | 1
15 | 2
25 | 1
但我想要如下輸出。
id | invite_count
-----------------
10 | 7
12 | 2
15 | 2
25 | 1
如何存檔?
uj5u.com熱心網友回復:
一種方法是使用chunkById使用塊查詢。要作業更新,請確保 invite_count在模型中列可填充
$ids=[10, 15, 12, 10, 25, 12];
$groupByIds=array_count_values($ids);
Student::whereIn("id",array_keys($groupByIds))
->chunkById(50, function ($students)use($groupByIds) {
$students->each(function ($student, $key)use($groupByIds) {
$student->update(['invite_count' => $student->invite_count ($groupByIds[ $student->id])]);
});
}, $column = 'id');
或者
Student::whereIn("id",array_keys($groupByIds))
->chunkById(50, function ($students)use($groupByIds) {
$students->each(function ($student, $key)use($groupByIds) {
$student->invite_count=$student->invite_count $groupByIds[ $student->id]);
$student->save();
});
}, $column = 'id');
參考:https : //laravel.com/docs/8.x/eloquent#chunking-results
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/381836.html
上一篇:如何在Laravel遷移或原始sql中將mysql8中的約束FOREIGNKEY從“ONDELETECASCADE”更改為“ONDELETESETNULL”
