PHP

Centralize Logic with Eloquent Model Observers

Use Laravel Eloquent Model Observers to centralize and manage event-driven logic for model lifecycle events (created, updated, deleted, etc.), ensuring consistency.

namespace App\Observers;

use App\Models\User;

class UserObserver
{
    public function creating(User $user)
    {
        // Automatically set a default status or generate a unique ID before a user is created
        if (empty($user->status)) {
            $user->status = 'pending';
        }
    }

    public function created(User $user)
    {
        // Log user creation or send a welcome email after a user is created
        \Log::info("User created: " . $user->email);
        // \Mail::to($user->email)->send(new WelcomeEmail($user));
    }

    public function deleting(User $user)
    {
        // Prevent deletion if the user has active orders
        if ($user->orders()->where('status', 'active')->exists()) {
            return false; // Prevent deletion
        }
    }
}

// In your AppServiceProvider (or a dedicated ObserverServiceProvider):
// use App\Models\User;
// use App\Observers\UserObserver;
//
// public function boot()
// {
//     User::observe(UserObserver::class);
// }

// Now, these methods will be called automatically when a User model is manipulated:
// $user = User::create(['name' => 'John Doe', 'email' => '[email protected]']);
// $user->delete();
How it works: Model Observers provide a clean way to group event listeners for a model's lifecycle events. This `UserObserver` demonstrates `creating` (before creation), `created` (after creation), and `deleting` (before deletion) events. `creating` can modify the model attributes before saving, `created` can perform actions after saving (like logging or sending emails), and `deleting` can even prevent an action based on conditions. Observers are registered in a service provider, centralizing event-driven logic and keeping your models clean and focused on their core responsibilities.

Need help integrating this into your project?

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

Hire DigitalCodeLabs