ホームページ  >  記事  >  バックエンド開発  >  Laravel でサイレント更新に saveQuietly() を使用する方法とタイミング

Laravel でサイレント更新に saveQuietly() を使用する方法とタイミング

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 22:41:02809ブラウズ

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

Laravel では、saveQuietly() は Eloquent モデルで使用できるメソッドであり、作成、作成、更新、更新などのイベントを発生させずにモデルを保存できます。モデルイベント。これは、ログ、通知、データ検証などのイベントに関連付けられた追加のアクションをトリガーせずにデータを更新または保存したい場合に役立ちます。

ここでは、Laravel の saveQuietly() の実践的な例を示したステップバイステップのガイドと、各部分の詳細な説明を示します。

シナリオ例

User モデルがあり、ユーザーが更新されるたびに、ユーザーに通知を送信するイベントがトリガーされると想像してください。ただし、特定の場合 (管理者の更新やバックグラウンドのメンテナンス タスクなど) では、この通知をトリガーせずにユーザー情報をサイレントに更新することが必要な場合があります。

saveQuietly() を実装する手順

ステップ 1: ユーザー モデルとイベントを定義する

User モデルには、ユーザーが更新されたときに起動される、更新および更新されたイベント用のイベント リスナーがある場合があります。

イベントを含むユーザー モデルの例:

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. イベントをトリガーせずに保存: save() の代わりに saveQuietly() を使用します。これにより、更新または更新されたイベントが発生しないことが保証されます。
$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();

saveQuietly() を使用する場合

saveQuietly() は、次のようなシナリオで役立ちます。

  • 一括更新: イベントのトリガーがパフォーマンスの問題を引き起こす可能性がある一括更新を実行する場合。
  • 管理者のオーバーライド: 管理者が通知を必要としない更新を行うとき。
  • バックグラウンド プロセス: ユーザーに警告したり、変更を記録したりせずにレコードを変更する、スケジュールされたタスクまたはメンテナンス スクリプト用。
  • 検証/リスナーのバイパス: 特定の更新が標準モデルのリスナーまたは検証に従う必要がない場合。

コントローラーの完全な例

管理者の更新を処理するためにこれを Laravel コントローラーに組み込む方法は次のとおりです。

   $user = User::find(1);

まとめ

  • save() は、標準的な更新に役立つ、関連するすべてのイベントをトリガーします。
  • saveQuietly() はこれらのイベントをバイパスし、追加の処理を行わずにサイレント更新または一括更新に役立ちます。

saveQuietly() を使用すると、イベント処理が不要なタスクを大幅に合理化し、Laravel で Eloquent モデルの動作をより詳細に制御できるようになります。

以上がLaravel でサイレント更新に saveQuietly() を使用する方法とタイミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。