PHP

Manage Model Lifecycle Events with Eloquent Observers

Organize and centralize event-driven logic for Eloquent models using dedicated Observer classes, improving code structure and maintainability.

<?php

namespace App\Observers;

use App\Models\User;
use Illuminate\Support\Facades\Mail;

class UserObserver
{
    /**
     * Handle the User 'created' event.
     */
    public function created(User $user): void
    {
        // For example, send a welcome email
        // Mail::to($user->email)->send(new WelcomeEmail($user));
        logger()->info('User ' . $user->id . ' created.');
    }

    /**
     * Handle the User 'updated' event.
     */
    public function updated(User $user): void
    {
        // For example, log changes to a separate audit trail
        logger()->info('User ' . $user->id . ' updated. Changed attributes: ' . json_encode($user->getChanges()));
    }

    /**
     * Handle the User 'deleted' event.
     */
    public function deleted(User $user): void
    {
        // For example, clean up related resources (e.g., delete their profile)
        // $user->profile->delete();
        logger()->info('User ' . $user->id . ' deleted.');
    }

    /**
     * Handle the User 'restored' event (for soft deletes).
     */
    public function restored(User $user): void
    {
        logger()->info('User ' . $user->id . ' restored.');
    }

    /**
     * Handle the User 'forceDeleted' event (for soft deletes).
     */
    public function forceDeleted(User $user): void
    {
        logger()->info('User ' . $user->id . ' force deleted.');
    }
}

// Register the observer in App\Providers\EventServiceProvider.php:
// protected $observers = [
//     User::class => [UserObserver::class],
// ];

// Or in a boot method (e.g., in a Service Provider):
// User::observe(UserObserver::class);

// When a User model is created, updated, or deleted, the corresponding
// method in UserObserver will be called, centralizing event logic.
How it works: Eloquent Observers provide a clean and centralized way to manage model lifecycle events (e.g., 'created', 'updated', 'deleted', 'restored'). Instead of cluttering models with event logic, an Observer class holds all event handlers for a specific model, making your code more modular, readable, and easier to maintain. Observers are typically registered in your 'EventServiceProvider'.

Need help integrating this into your project?

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

Hire DigitalCodeLabs