← Back to all snippets
PHP

React to Eloquent Model Events with Observers

Implement Model Observers in Laravel to centralize event handling logic for model lifecycle events (created, updated, deleted), promoting cleaner, modular code.

// app/Observers/UserObserver.php
namespace App\Observers;

use App\Models\User;

class UserObserver
{
    public function created(User $user)
    {
        // Logic to run AFTER a User is created
        // e.g., send a welcome email, create a related profile record
        // Mail::to($user->email)->send(new WelcomeEmail($user));
    }

    public function updating(User $user)
    {
        // Logic to run BEFORE a User is updated
        // e.g., log changes, prevent certain updates based on conditions
    }

    public function deleted(User $user)
    {
        // Logic to run AFTER a User is deleted
        // e.g., clean up related records (if not using cascading deletes), notify admins
    }

    // Other events: creating, updated, saving, saved, restoring, restored, forceDeleted
}

// Register the observer in app/Providers/AppServiceProvider.php (or a dedicated ObserverServiceProvider)
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Models\User;
use App\Observers\UserObserver;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        User::observe(UserObserver::class);
    }
}
How it works: Model Observers provide a clean, centralized way to handle events fired by Eloquent models (like `created`, `updated`, `deleted`, `saving`, `retrieved`). Instead of scattering event listeners across multiple files or within the model itself, an observer class encapsulates all event handling logic for a specific model, leading to more organized, maintainable, and reusable code, promoting the Single Responsibility Principle.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs