PHP
Automate Actions with Eloquent Model Observers
Centralize logic for responding to Eloquent model lifecycle events like creation, update, and deletion using dedicated observer classes.
// 1. Create the Observer: php artisan make:observer UserObserver --model=User
// In app/Observers/UserObserver.php
namespace App\Observers;
use App\Models\User;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Log;
class UserObserver
{
/**
* Handle the User "created" event.
*/
public function created(User $user): void
{
Log::info("User {$user->name} ({$user->id}) was created.");
// Example: Send a welcome email
Mail::to($user->email)->send(new WelcomeEmail($user));
}
/**
* Handle the User "updated" event.
*/
public function updated(User $user): void
{
Log::info("User {$user->name} ({$user->id}) was updated.");
// Example: Invalidate a cache for this user
cache()->forget('user_' . $user->id);
}
/**
* Handle the User "deleted" event.
*/
public function deleted(User $user): void
{
Log::warning("User {$user->name} ({$user->id}) was deleted.");
// Example: Clean up related resources (e.g., files)
// Storage::deleteDirectory('user_data/' . $user->id);
}
// Other events: saving, retrieved, creating, updating, deleting, restoring, forceDeleted
}
// 2. Register the Observer (e.g., in app/Providers/AppServiceProvider.php)
namespace App\Providers;
use App\Models\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
User::observe(UserObserver::class);
}
}
How it works: Eloquent observers provide a clean and centralized way to group event listeners for a given model. Instead of scattering event listeners across your application, an observer class contains methods for handling various model lifecycle events (e.g., `created`, `updated`, `deleted`). This promotes single responsibility, improves maintainability, and keeps related logic organized, making it easier to manage side effects like sending emails, logging, or cache invalidation.