waelmoh / laravel-update-insert-many
Laravel 批量插入或批量更新模型集合
v2.0.3
2022-10-29 19:21 UTC
Requires
- php: >=8.0.0
This package is auto-updated.
Last update: 2024-09-29 05:57:16 UTC
README
Laravel 批量更新一组 eloquent 模型。对模型集合执行单个查询以批量更新。它还将更新模型的 updated_at
列。
安装
composer require waelmoh/laravel-update-insert-many
用法
批量更新
更新模型集合。这将为所有传递的模型执行单个更新查询。接受数组数组或集合。每个数组|对象应包含模型键和要更新的数据。键可以是任何列,默认为 id
。键也可以是列数组。
仅包括脏或更改的属性将更新。这将更新模型的 updated_at
列和表的。
$users = [ [ 'id' => 31, 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'John@Doe.com' ], [ 'id' => 32, 'first_name' => 'Hubert', 'last_name' => 'Wiza', 'email' => 'Hubert@Wiza.org' ], [ 'id' => 33, 'first_name' => 'Mikayla', 'last_name' => 'Keeling', 'email' => 'Mikayla.hyatt@example.com' ] ]
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, ['username', 'email']); // use username and email as keys instead of id User::updateMany($users, ['username', 'email'], ['last_name']); // update last name if username and email match
指定要更新的列
User::updateMany($users, 'id', ['email', 'first_name', 'last_name']);
工作原理
这将产生如下查询
UPDATE `users` SET `email` = CASE WHEN `id` = '31' THEN 'John@Doe.com' WHEN `id` = '32' THEN 'Hubert@Wiza.org' WHEN `id` = '33' THEN 'Mikayla.hyatt@example.com' ELSE `email` END , `first_name` = CASE WHEN `id` = '31' THEN 'John' WHEN `id` = '32' THEN 'Hubert' WHEN `id` = '33' THEN 'Mikayla' ELSE `first_name` END , `last_name` = CASE WHEN `id` = '31' THEN 'Doe' WHEN `id` = '32' THEN 'Wiza' WHEN `id` = '33' THEN 'Keeling' ELSE `last_name` END WHERE `id` IN ( 31, 32, 33 );