ajcastro / insert-update-many
Laravel 对 Eloquent 模型集合进行批量插入或批量更新的工具。
v0.1.0
2019-07-12 14:08 UTC
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2024-09-13 02:08:22 UTC
README
Laravel 对 Eloquent 模型集合进行批量插入或批量更新的工具。执行批量插入或更新操作时,将执行单个查询。这将更新模型及其表的 created_at
和 updated_at
列。方法名 insertMany
和 updateMany
基于曹颖的方法名 saveMany
。insertMany
和 updateMany
都可以接受模型集合或纯数组数据。
安装
composer require ajcastro/insert-update-many
使用方法
批量插入
直接传递数组或模型集合,与 Laravel 内置的 insert()
方法不同,后者仅接受数组。这已设置 created_at
和 updated_at
列。
$users = factory(User::class, 10)->make(); User::insertMany($users);
工作原理
传入的模型集合将被转换为数组形式,仅包括可填充属性,并将其数组形式传递给 Laravel 的原生 insert()
方法。
批量更新
更新数组或模型集合。这将针对所有传入的模型执行单个更新查询。仅包括脏或已更改的属性将包含在更新中。这将更新模型及其表的 updated_at
列。
User::updateMany($users); // update many models using id as the default key User::updateMany($users, 'id'); // same as above User::updateMany($users, 'username'); // use username as key instead of id
指定要更新的列
User::updateMany($users, 'id', ['email', 'first_name', 'last_name']);
工作原理
这将生成如下查询
UPDATE `users` SET `email` = CASE WHEN `id` = '426' THEN 'favian.russel@example.com' WHEN `id` = '427' THEN 'opurdy@example.org' WHEN `id` = '428' THEN 'kaylah.hyatt@example.com' ELSE `email` END , `first_name` = CASE WHEN `id` = '426' THEN 'Orie' WHEN `id` = '427' THEN 'Hubert' WHEN `id` = '428' THEN 'Mikayla' ELSE `first_name` END , `last_name` = CASE WHEN `id` = '426' THEN 'Weissnat' WHEN `id` = '427' THEN 'Wiza' WHEN `id` = '428' THEN 'Keeling' ELSE `last_name` END WHERE `id` IN ( 426, 427, 428 );