Wie und wann man saveQuietly() für stille Updates in Laravel verwendet

Mary-Kate Olsen
Freigeben: 2024-10-28 22:41:02
Original
808 Leute haben es durchsucht

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

In Laravel ist saveQuietly() eine für Eloquent-Modelle verfügbare Methode, mit der Sie ein Modell speichern können, ohne Ereignisse wie Erstellen, Erstellen, Aktualisieren, Aktualisieren und andere Eloquent-Ereignisse auszulösen Modellveranstaltungen. Dies kann in Situationen nützlich sein, in denen Sie Daten aktualisieren oder speichern möchten, ohne zusätzliche Aktionen im Zusammenhang mit diesen Ereignissen auszulösen, wie z. B. Protokollierung, Benachrichtigungen oder Datenvalidierung.

Hier ist eine Schritt-für-Schritt-Anleitung mit einem praktischen Beispiel von saveQuietly() in Laravel, einschließlich einer detaillierten Erklärung jedes Teils.

Szenariobeispiel

Stellen Sie sich vor, Sie haben ein Benutzermodell und jedes Mal, wenn ein Benutzer aktualisiert wird, wird ein Ereignis ausgelöst, das eine Benachrichtigung an den Benutzer sendet. In bestimmten Fällen (z. B. bei Administratoraktualisierungen oder Wartungsaufgaben im Hintergrund) möchten Sie jedoch möglicherweise Benutzerinformationen stillschweigend aktualisieren, ohne diese Benachrichtigung auszulösen.

Schritte zur Implementierung von saveQuietly()

Schritt 1: Definieren Sie das Benutzermodell und das Ereignis

In Ihrem Benutzermodell verfügen Sie möglicherweise über Ereignis-Listener für Aktualisierungen und aktualisierte Ereignisse, die ausgelöst werden, wenn ein Benutzer aktualisiert wird.

Beispiel-Benutzermodell mit Ereignissen:

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());
        });
    }
}
Nach dem Login kopieren
Nach dem Login kopieren

Hier jedes Mal, wenn ein Benutzer aktualisiert wird:

  1. Das Aktualisierungsereignis protokolliert Informationen über das Update.
  2. Das aktualisierte Ereignis sendet eine Benachrichtigung an den Benutzer.

Schritt 2: Aktualisieren Sie einen Benutzer normal

Wenn Sie einen Benutzer mit save() aktualisieren, werden diese Ereignisse ausgelöst.

Beispiel:

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

Erwartetes Ergebnis: Die Aktualisierungs- und Aktualisierungsereignisse werden ausgelöst, was bedeutet, dass der Protokolleintrag erstellt und der Benutzer benachrichtigt wird.

Schritt 3: Verwenden von saveQuietly() zum Umgehen von Ereignissen

Um das Auslösen dieser Ereignisse zu vermeiden (z. B. wenn ein Administrator den Benutzerstatus im Rahmen eines Massenvorgangs aktualisiert), können Sie saveQuietly() verwenden.

Beispiel:

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

Mit saveQuietly() werden weder die Aktualisierungs- noch die Aktualisierungsereignisse ausgelöst, was bedeutet:

  • Für das Update wird kein Protokolleintrag erstellt.
  • Es wird keine Benachrichtigung an den Benutzer gesendet.

Schritt-für-Schritt-Erklärung von saveQuietly()

  1. Suchen Sie das Modell: Rufen Sie die Modellinstanz ab, die Sie aktualisieren möchten. Hier verwenden wir User::find(1), um den Benutzer mit der ID 1 abzurufen.
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());
        });
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
  1. Attribute des Modells ändern: Ändern Sie die erforderlichen Attribute am Modell. Ändern Sie beispielsweise den Status von aktiv in inaktiv.
$user = User::find(1);
$user->status = 'active';
$user->save();
Nach dem Login kopieren
Nach dem Login kopieren
  1. Speichern ohne Ereignisse auszulösen: Verwenden Sie saveQuietly() anstelle von save(). Dadurch wird sichergestellt, dass keine aktualisierenden oder aktualisierten Ereignisse ausgelöst werden.
$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();
Nach dem Login kopieren
Nach dem Login kopieren

Wann sollte saveQuietly() verwendet werden?

saveQuietly() ist in folgenden Szenarios von Vorteil:

  • Massenaktualisierungen: Bei der Durchführung von Massenaktualisierungen, bei denen auslösende Ereignisse zu Leistungsproblemen führen könnten.
  • Administratorüberschreibungen: Wenn ein Administrator Aktualisierungen vornimmt, die keine Benachrichtigungen erfordern.
  • Hintergrundprozesse: Für geplante Aufgaben oder Wartungsskripte, die Datensätze ändern, ohne dass Benutzer benachrichtigt oder die Änderungen protokolliert werden müssen.
  • Umgehen von Validierungen/Listenern: Wenn bestimmte Updates nicht den Standardmodell-Listenern oder -Validierungen entsprechen müssen.

Vollständiges Beispiel im Controller

So können Sie dies in einen Laravel-Controller integrieren, um Administratoraktualisierungen durchzuführen:

   $user = User::find(1);
Nach dem Login kopieren

Zusammenfassung

  • save() löst alle zugehörigen Ereignisse aus, nützlich für Standardaktualisierungen.
  • saveQuietly() umgeht diese Ereignisse, was für stille oder Massenaktualisierungen ohne zusätzliche Verarbeitung nützlich ist.

Mit saveQuietly() können Aufgaben, bei denen eine Ereignisbehandlung unnötig ist, erheblich rationalisiert werden, sodass Sie eine bessere Kontrolle über das Verhalten des Eloquent-Modells in Laravel haben.

Das obige ist der detaillierte Inhalt vonWie und wann man saveQuietly() für stille Updates in Laravel verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!