PHP

Centralize Model Event Handling with Eloquent Observers

Learn to use Eloquent observers to centralize and organize code that responds to model lifecycle events like creating, updating, or deleting records.

// 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);
    }
}

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

use App\Models\User;

class UserObserver
{
    public function creating(User $user): void
    {
        // Set a default value before the user is saved
        $user->status = 'pending';
    }

    public function created(User $user): void
    {
        // Log creation or send a welcome email
        \Log::info("User {$user->id} was created.");
    }

    public function updating(User $user): void
    {
        // Perform actions before an update
        if ($user->isDirty('email')) {
            \Log::info("User {$user->id}'s email is being updated from {$user->getOriginal('email')} to {$user->email}");
        }
    }

    public function deleted(User $user): void
    {
        // Clean up related data or send notifications
        \Log::info("User {$user->id} was deleted.");
    }
}
How it works: Eloquent observers provide a centralized location to group event listeners for a model. Instead of defining event callbacks directly within the model or service providers, an observer class contains methods for various model lifecycle events (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). This pattern helps keep your models cleaner and makes event handling logic more organized and reusable. Observers are typically registered in a service provider's `boot` method.

Need help integrating this into your project?

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

Hire DigitalCodeLabs