首页 >后端开发 >php教程 >如何以及何时在 Laravel 中使用 saveQuietly() 进行静默更新

如何以及何时在 Laravel 中使用 saveQuietly() 进行静默更新

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-28 22:41:02893浏览

How and When to Use saveQuietly() for Silent Updates in Laravel

在 Laravel 中,saveQuietly() 是 Eloquent 模型上可用的方法,它允许您保存模型而不触发任何事件,例如创建、创建、更新、更新和其他 Eloquent 事件模型事件。当您想要更新或保存数据而不触发与这些事件相关的任何其他操作(例如日志记录、通知或数据验证)时,这非常有用。

这里有一个分步指南,包含 Laravel 中 saveQuietly() 的实践示例,包括每个部分的详细说明。

场景示例

假设您有一个 User 模型,每次更新用户时,都会触发一个事件,向用户发送通知。但是,在某些特定情况下(例如管理员更新或后台维护任务),您可能希望以静默方式更新用户信息而不触发此通知。

实现 saveQuietly() 的步骤

第 1 步:定义用户模型和事件

在您的用户模型中,您可能有用于更新和更新事件的事件侦听器,当用户更新时会触发这些事件侦听器。

具有事件的示例用户模型:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'status'];

    protected static function booted()
    {
        // Event listener for updating
        static::updating(function ($user) {
            // Log or handle the update event
            \Log::info("User is being updated: {$user->id}");
        });

        // Event listener for updated
        static::updated(function ($user) {
            // Example action, such as sending a notification
            $user->notify(new \App\Notifications\UserUpdatedNotification());
        });
    }
}

这里,每次用户更新时:

  1. 更新事件将记录有关更新的信息。
  2. 更新的事件将向用户发送通知。

步骤 2:正常更新用户

当您使用 save() 更新用户时,这些事件将会触发。

示例:

$user = User::find(1);
$user->status = 'active';
$user->save();

预期结果:更新和更新事件被触发,意味着将创建日志条目,并通知用户。

步骤 3:使用 saveQuietly() 绕过事件

为了避免触发这些事件(例如,如果管理员在批量操作中更新用户状态),您可以使用 saveQuietly()。

示例:

$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();

使用 saveQuietly(),更新和更新事件都不会被触发,这意味着:

  • 没有为更新创建日志条目。
  • 不会向用户发送任何通知。

saveQuietly() 的逐步说明

  1. 定位模型:获取要更新的模型实例。在这里,我们使用 User::find(1) 来检索 ID 为 1 的用户。
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'status'];

    protected static function booted()
    {
        // Event listener for updating
        static::updating(function ($user) {
            // Log or handle the update event
            \Log::info("User is being updated: {$user->id}");
        });

        // Event listener for updated
        static::updated(function ($user) {
            // Example action, such as sending a notification
            $user->notify(new \App\Notifications\UserUpdatedNotification());
        });
    }
}
  1. 修改模型的属性:更改模型上必要的属性。例如,将状态从活动更改为非活动。
$user = User::find(1);
$user->status = 'active';
$user->save();
  1. 不触发事件保存:使用 saveQuietly() 而不是 save()。这可确保不会触发任何更新或已更新事件。
$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();

何时使用 saveQuietly()

saveQuietly() 在以下场景中很有用:

  • 批量更新:执行批量更新时,触发事件可能会导致性能问题。
  • 管理员覆盖:当管理员进行不需要通知的更新时。
  • 后台进程:用于修改记录的计划任务或维护脚本,无需提醒用户或记录更改。
  • 绕过验证/监听器:当特定更新不需要遵守标准模型监听器或验证时。

控制器中的完整示例

以下是如何将其放入 Laravel 控制器来处理管理更新:

   $user = User::find(1);

概括

  • save() 触发所有关联事件,对于标准更新很有用。
  • saveQuietly() 绕过这些事件,对于静默或批量更新非常有用,无需额外处理。

使用 saveQuietly() 可以显着简化不需要事件处理的任务,让您更好地控制 Laravel 中的 Eloquent 模型行为。

以上是如何以及何时在 Laravel 中使用 saveQuietly() 进行静默更新的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn