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

有以下数据:

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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 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  = [
            // 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年前 评论
宇宙最厉害

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

$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年前 评论

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

4年前 评论

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