在使用 Laravel 进行项目开发时,经常会遇到需要批量更新数据库记录的场景。例如,用户修改了多个商品的价格,或者需要更新多个用户的状态。如果每个记录的更新值都不同,传统的 Eloquent 模型更新方式可能会导致大量的数据库查询,严重影响性能。
iksaku/laravel-mass-update
安装
使用 Composer 安装非常简单:
<pre class="brush:php;toolbar:false;">composer require iksaku/laravel-mass-update
使用方法
在你的 Eloquent 模型中,引入
Iksaku\Laravel\MassUpdate\MassUpdatable
<pre class="brush:php;toolbar:false;">use Illuminate\Database\Eloquent\Model;
use Iksaku\Laravel\MassUpdate\MassUpdatable;
class User extends Model
{
use MassUpdatable;
// ...
}假设你有一个
users
<pre class="brush:php;toolbar:false;">User::massUpdate(
values: [
['id' => 1, 'name' => 'Jorge González'],
['id' => 2, 'name' => 'Gladys Martínez'],
]
);这将使用单个 SQL 查询更新
id
默认情况下,
massUpdate
username
<pre class="brush:php;toolbar:false;">User::massUpdate(
values: [
['username' => 'iksaku', 'name' => 'Jorge González'],
['username' => 'gm_mtz', 'name' => 'Gladys Martínez'],
],
uniqueBy: 'username'
);如果你已经获取了多个 Eloquent 模型实例,可以直接将它们传递给
massUpdate
<pre class="brush:php;toolbar:false;">$jorge = User::find(1);
$gladys = User::find(2);
$jorge->name = 'Jorge González';
$gladys->name = 'Gladys Martínez';
User::massUpdate(
values: [$jorge, $gladys]
);假设你有一个
expenses
year
quarter
<pre class="brush:php;toolbar:false;">Expense::massUpdate(
values: [
['year' => 2020, 'quarter' => 'Q1', 'total_expenses' => 431.35],
['year' => 2021, 'quarter' => 'Q1', 'total_expenses' => 416.70],
],
uniqueBy: ['year', 'quarter']
);注意:
uniqueBy
values
uniqueBy
你可以将
massUpdate
where
<pre class="brush:php;toolbar:false;">TodoItem::query()
->where('user_id', auth()->id())
->massUpdate(
values: collect($request->input('item_order'))
->mapWithKeys(
fn ($id, int $position) => ['id' => $id, 'order' => $position]
)
);优势
实际应用效果
在我的项目中,使用
iksaku/laravel-mass-update
总而言之,
iksaku/laravel-mass-update
以上就是批量更新Laravel模型:iksaku/laravel-mass-update助你优化数据库操作的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号