在使用 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号