waelmoh/laravel-update-insert-many

Laravel 批量插入或批量更新模型集合

v2.0.3 2022-10-29 19:21 UTC

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
   );

权利

此包受 [ajcastro] 启发,由 [waelmoh] 衍生并开发。