You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何批量更新数据表中多个ID对应的数据?

Laravel批量更新多个ID对应数据的解决方案

嘿,我来帮你搞定这个批量更新的问题~首先得指出你现有代码的问题:当你用Test::find($test)($test是包含多个ID的数组)时,返回的是Eloquent集合(Collection),而不是单个模型实例。所以直接给$report->status = "A"再调用save()是完全无效的——集合本身没有status属性,也没有save()方法,这样写根本不会触发数据库更新。

下面给你两种常用的解决方案,按需选择:

方案一:高效批量更新(推荐)

如果不需要触发模型的事件(比如saving/saved钩子),直接用whereIn配合update是最优解,因为它只会生成一条SQL语句,性能拉满:

$test = [185, 216];
// 直接匹配ID数组,批量更新status字段
Test::whereIn('id', $test)->update(['status' => 'A']);

方案二:遍历模型实例更新(适合需要模型逻辑的场景)

如果你需要执行模型的业务逻辑、触发事件,或者要对每个模型做额外处理,可以遍历集合里的每个模型实例:

$test = [185, 216];
$reports = Test::find($test);

// 用foreach遍历
foreach ($reports as $report) {
    $report->status = 'A';
    $report->save(); // 每个模型单独保存,会触发对应的模型事件
}

// 或者用Collection的each方法更简洁
Test::find($test)->each(function ($report) {
    $report->status = 'A';
    $report->save();
});

简单总结下:如果只是单纯更新数据库字段,优先用方案一;如果涉及模型层面的操作,再用方案二。

内容的提问来源于stack exchange,提问作者My testing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:42:02