如何以及何時在 Laravel 中使用 saveQuietly() 進行靜默更新

Mary-Kate Olsen
發布: 2024-10-28 22:41:02
原創
808 人瀏覽過

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!