PHP

Automate Tasks with Eloquent Model Observers

Leverage Eloquent model observers to centralize logic for reacting to various model lifecycle events like creating, updating, deleting, and more, improving code organization.

// app/Observers/UserObserver.php
namespace App\Observers;
use App\Models\User;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;

class UserObserver
{
    public function created(User $user)
    {
        // Send welcome email after a new user is created
        Mail::to($user->email)->send(new WelcomeEmail($user));
        // Log::info("User {$user->id} created, welcome email sent.");
    }

    public function updated(User $user)
    {
        // Perform action after a user is updated
        if ($user->isDirty('email')) {
            // Email changed, maybe require re-verification
            // Log::info("User {$user->id} email changed to {$user->email}.");
        }
    }

    public function deleted(User $user)
    {
        // Clean up related data when a user is deleted
        // $user->posts()->delete();
        // Log::info("User {$user->id} deleted.");
    }
}

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

// Example usage (Observer hooks automatically)
// $user = User::create(['name' => 'John Doe', 'email' => '[email protected]', 'password' => bcrypt('password')]);
// $user->name = 'Jane Doe';
// $user->save();
// $user->delete();
How it works: This snippet demonstrates how to use Eloquent Observers to react to model lifecycle events. An observer class (`UserObserver`) centralizes logic for events like `created`, `updated`, or `deleted`. By registering the observer in a service provider (e.g., `AppServiceProvider`), these methods are automatically triggered whenever a `User` model is created, updated, or deleted. This pattern keeps business logic clean and separated from models and controllers, making it ideal for tasks such as sending welcome emails, logging changes, or cleaning up related data.

Need help integrating this into your project?

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

Hire DigitalCodeLabs