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

有以下数据:

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

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

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

具体你的需求不知道。


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

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

1年前 评论

@cainiao9980 :cold_sweat: :cold_sweat: :cold_sweat:

1年前 评论

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

1年前 评论
Summer

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

1年前 评论
DenverB

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

1年前 评论

@Summer 老大辛苦了~

1年前 评论
沈益飞

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

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

@沈益飞 谢谢,学习了~

1年前 评论

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

3周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会