【问题标题】:How to update multiple records value in database using laravel?如何使用 laravel 更新数据库中的多个记录值?
【发布时间】:2022-01-18 07:00:08
【问题描述】:

最初,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

如何归档?

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    一种方法是使用 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

    【讨论】:

    • 感谢@John 的回答。但是在这里您使用每个循环进行更新,然后我认为它会为每个循环单独更新?
    • @Senthur 是单独的循环,但带有查询块,因此它不会一次检索所有记录。如果没有循环是可能的,那么它很好,但不确定在你的用例中它是否可以完成,因为增量纯粹基于数量的 ids 计数。让我们等待是否有人提出更好的解决方案,以便我们都从中学习
    • 谢谢你的回答。这实际上是一个很好的解决方案。但我会等你提到答案让我们看看。
    • 上面的代码没有更新数据库中的值。
    • 你是对的。如果我们添加fillableupdate 也可以工作。无论如何,两者都会起作用。再次感谢。我认为不会有更好的答案。所以我同意了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2019-05-18
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多