在使用 Laravel 进行项目开发时,经常会遇到需要批量更新数据库记录的场景。例如,用户修改了多个商品的价格,或者需要更新多个用户的状态。如果每个记录的更新值都不同,传统的 Eloquent 模型更新方式可能会导致大量的数据库查询,严重影响性能。
composer在线学习地址:学习地址
iksaku/laravel-mass-update
库应运而生,它允许你使用单个查询更新多个 Laravel 模型记录,每个记录可以有不同的值,从而大大提高了数据库操作的效率。
安装
使用 Composer 安装非常简单:
composer require iksaku/laravel-mass-update使用方法
引入 Trait
在你的 Eloquent 模型中,引入
IksakuLaravelMassUpdateMassUpdatabletrait:
use IlluminateDatabaseEloquentModel;use IksakuLaravelMassUpdateMassUpdatable;class User extends Model{ use MassUpdatable; // ...}简单用例:更新多个记录的值
假设你有一个
users表,现在需要更新多个用户的姓名:
User::massUpdate( values: [ ['id' => 1, 'name' => 'Jorge González'], ['id' => 2, 'name' => 'Gladys Martínez'], ]);这将使用单个 SQL 查询更新
id为 1 和 2 的用户的姓名。
使用其他字段作为唯一标识
默认情况下,
massUpdate使用模型的主键作为唯一标识。如果你想使用其他字段,例如
username,可以这样:
图可丽批量抠图
用AI技术提高数据生产力,让美好事物更容易被发现
26 查看详情
User::massUpdate( values: [ ['username' => 'iksaku', 'name' => 'Jorge González'], ['username' => 'gm_mtz', 'name' => 'Gladys Martínez'], ], uniqueBy: 'username');更新多个 Eloquent 模型
如果你已经获取了多个 Eloquent 模型实例,可以直接将它们传递给
massUpdate:
$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来更新记录:
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:
TodoItem::query() ->where('user_id', auth()->id()) ->massUpdate( values: collect($request->input('item_order')) ->mapWithKeys( fn ($id, int $position) => ['id' => $id, 'order' => $position] ) );优势
性能提升: 使用单个 SQL 查询更新多个记录,减少了数据库交互次数,提高了性能。代码简洁: 简化了批量更新的代码,提高了可读性和可维护性。灵活: 支持多种使用场景,包括更新普通数组、Eloquent 模型和使用多个字段作为唯一标识。
实际应用效果
在我的项目中,使用
iksaku/laravel-mass-update后,批量更新操作的性能提升了 50% 以上,极大地改善了用户体验。
总而言之,
iksaku/laravel-mass-update是一个非常实用的 Laravel 扩展包,可以帮助你高效地批量更新数据库记录,优化数据库操作,提升应用性能。如果你在 Laravel 项目中需要进行批量更新操作,不妨尝试一下这个库。
以上就是批量更新Laravel模型:iksaku/laravel-mass-update助你优化数据库操作的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/545875.html
图可丽批量抠图
微信扫一扫
支付宝扫一扫