如何批量更新(累加)某个字段?

有以下数据:

$arr  = [
            // user_id => reward
            '1' => 50,
            '2' => 30,
            '3' => 60,
            ...
        ];

想要批量更新 User 模型的 reward 字段,把对应 user 的 reward 的值加上数组里面的值,Laravel 有什么方法可以批量处理吗?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11
宇宙最厉害

不知道可不可以这样,虽然也是遍历。代码没有实际运行过。

$arr = [
  '1' => 50,
  '2' => 30,
  '3' => 60
];
User::find(array_keys($arr))->each(function ($query) use ($arr) {
  $query->increment('award' , $arr[$query->id]);
});
# 批量更新相同的 award
User::find(array_keys($arr))->each->increment('award', 30);
6年前 评论
宇宙最厉害

不知道可不可以这样,虽然也是遍历。代码没有实际运行过。

$arr = [
  '1' => 50,
  '2' => 30,
  '3' => 60
];
User::find(array_keys($arr))->each(function ($query) use ($arr) {
  $query->increment('award' , $arr[$query->id]);
});
# 批量更新相同的 award
User::find(array_keys($arr))->each->increment('award', 30);
6年前 评论

具体你的需求不知道。


$arr  = [
            // user_id => reward
            '1' => 50,
            '2' => 30,
            '3' => 60,
            ...
        ];
$user = User::first();
$user->increment('reward ', array_sum($arr));
6年前 评论

@施国鹏
$arr 里面的 key 为 user_id ,我要对 user_id 为 1,2,3... 的所有所有 user 的 reward 字段分别加上对应的 value 。
只能遍历 $arr 处理吗?Laravel 有没有提供什么方法可以批量更新呢?

6年前 评论

@cainiao9980 :cold_sweat: :cold_sweat: :cold_sweat:

6年前 评论

应该没有~~~ 我也不确定,一般都是遍历的,有的话记得艾特我一下 :smile:

6年前 评论
Summer

@weir 该用户已被禁言,大家下次遇到此类回答,不论他多有理,都 @ 我处理。

6年前 评论
DenverB

如果使用ORM的话,还真不知道,也还挺想知道的。。。不过如果能够保证数据安全性的话,使用原生的mysql语句去实现也可以的吧。

6年前 评论

@Summer 这种需求有没处理方法

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!