Was sind Modell-Events?
Eloquent-Modelle lösen an bestimmten Punkten ihres Lebenszyklus automatisch Events aus. Indem Sie sich an diese Events hängen, können Sie vor oder nach dem Speichern, Löschen usw. eigene Logik einschleusen. Die von Eloquent ausgelösten Events sind:| Event | Zeitpunkt |
|---|---|
retrieved | Nachdem das Modell aus der Datenbank geladen wurde |
creating | Unmittelbar vor dem Speichern eines neuen Modells |
created | Unmittelbar nach dem Speichern eines neuen Modells |
updating | Unmittelbar vor dem Aktualisieren eines bestehenden Modells |
updated | Unmittelbar nach dem Aktualisieren eines bestehenden Modells |
saving | Unmittelbar vor dem Speichern (Neuanlage oder Update) |
saved | Unmittelbar nach dem Speichern (Neuanlage oder Update) |
deleting | Unmittelbar vor dem Löschen eines Modells |
deleted | Unmittelbar nach dem Löschen eines Modells |
trashed | Unmittelbar nach einem Soft Delete |
forceDeleting | Unmittelbar vor einem harten Löschen |
forceDeleted | Unmittelbar nach einem harten Löschen |
restoring | Unmittelbar vor dem Wiederherstellen eines Soft-Deletes |
restored | Unmittelbar nach dem Wiederherstellen eines Soft-Deletes |
replicating | Beim Aufruf von replicate() |
-ing enden, feuern vor der Persistierung in die DB, Events auf -ed danach.
Event-Listener über Closures
Für einfache Event-Behandlung können Sie Closures in derbooted-Methode des Modells registrieren.
queueable.
Property $dispatchesEvents
Wenn Sie das Laravel-Event-System nutzen möchten, ordnen Sie über die Property $dispatchesEvents Modell-Events eigenen Event-Klassen zu.
Eine Observer-Klasse anlegen
Wenn Sie mehrere Events desselben Modells bündeln möchten, ist eine Observer-Klasse übersichtlicher als eine Reihe von Closures.Klasse per Artisan-Command erzeugen
Erzeugen Sie ein Gerüst mit Die Datei
make:observer. Mit der Option --model erhalten Sie passende Methoden.app/Observers/UserObserver.php wird angelegt.Methoden je Event implementieren
Der Methodenname entspricht dem Event-Namen. Als Argument erhalten Sie die Modell-Instanz.
Observer am Modell registrieren
Es gibt zwei Registrierungsvarianten. In Laravel 13 wird das Attribut Zum Registrieren mehrerer Observer wiederholen Sie das Attribut oder übergeben ein Array.Variante 2: Registrierung im
#[ObservedBy] empfohlen.Variante 1: Attribut #[ObservedBy] (empfohlen)Sie versehen die Modellklasse mit dem Attribut — die Registrierung ist damit abgeschlossen. Änderungen am AppServiceProvider sind nicht nötig.AppServiceProviderRufen Sie in der boot-Methode observe auf.Das Attribut
#[ObservedBy] liegt im Namensraum Illuminate\Database\Eloquent\Attributes und ist native PHP-Syntax ab 8.0, die Laravel 13 aktiv einsetzt.Observer innerhalb von Datenbanktransaktionen
Werden Modelle innerhalb einer Transaktion erstellt oder aktualisiert, wollen Sie den Observer manchmal erst nach dem Commit ausführen. Implementieren Sie dazu das InterfaceShouldHandleEventsAfterCommit.
Events temporär deaktivieren
withoutEvents — Events während eines Codeabschnitts unterdrücken
Innerhalb der an User::withoutEvents() übergebenen Closure werden keinerlei Modell-Events ausgelöst.
saveQuietly — Events beim Speichern unterdrücken
Wenn Sie ein Modell speichern wollen, ohne Events auszulösen, nutzen Sie saveQuietly.
Praktische Anwendungsfälle
Cache automatisch invalidieren
Wenn ein Modell aktualisiert oder gelöscht wird, den zugehörigen Cache automatisch leeren.Audit-Logs schreiben
Änderungshistorien automatisch protokollieren. MitgetDirty() erhalten Sie die Werte vor und nach der Änderung.
Verknüpfte Modelle automatisch aktualisieren
Beispiel: Nach Abschluss einer Bestellung den Lagerbestand automatisch anpassen.Nächste Schritte
Fortgeschritten: PHP-Attribute
Lernen Sie die PHP-Attribute von Laravel 13 inklusive
#[ObservedBy] im Überblick.