Model Observers group lifecycle event listeners for an ActiveRecord model into a dedicated class. Instead of scattering event callbacks across models or controllers, observers encapsulate model-driven business logic such as sending welcome emails, dispatching jobs, clearing caches, or generating slugs.
Generating an Observer
Use the CLI generator to scaffold an observer class:
Terminal • bash
php veldora make:observer UserObserver --model=UserThis creates app/Observers/UserObserver.php:
example.php
PHP
namespace App\Observers;
use App\Models\User;
class UserObserver
{
public function creating(User $user): void
{
// Executed before a new record is inserted
}
public function created(User $user): void
{
// Executed after a new record is inserted
}
public function updating(User $user): void
{
// Executed before an existing record is updated
}
public function updated(User $user): void
{
// Executed after an existing record is updated
}
public function saving(User $user): void
{
// Executed before insert or update
}
public function saved(User $user): void
{
// Executed after insert or update
}
public function deleting(User $user): void
{
// Executed before record is deleted
}
public function deleted(User $user): void
{
// Executed after record is deleted
}
public function restoring(User $user): void
{
// Executed before a soft-deleted record is restored
}
public function restored(User $user): void
{
// Executed after a soft-deleted record is restored
}
public function forceDeleted(User $user): void
{
// Executed after record is permanently deleted
}
}Registering Observers
Register an observer using Model::observe(), typically in your application bootstrap (bootstrap/app.php) or a Service Provider:
example.php
PHP
use App\Models\User;
use App\Observers\UserObserver;
// Pass class-string (instantiated automatically)
User::observe(UserObserver::class);
// Or pass an existing instance
User::observe(new UserObserver());Supported Lifecycle Events
| Event Hook | When It Fires |
|---|---|
creating | Before a new record is inserted into the database |
created | After a new record has been inserted |
updating | Before an existing record is updated |
updated | After an existing record has been updated |
saving | Before a record is saved (both new and updated) |
saved | After a record has been saved (both new and updated) |
deleting | Before a record is deleted from the database |
deleted | After a record has been deleted |
restoring | Before a soft-deleted record is restored |
restored | After a soft-deleted record has been restored |
forceDeleted | After a record is permanently removed from the database |
Returningfalsefrom acreating,updating,saving, ordeletingobserver method will cancel the database operation immediately.