PHP

Automating Business Logic with Eloquent Model Observers

Use Laravel Eloquent Model Observers to centralize and manage event-driven logic for model lifecycle events like creating, updating, or deleting.

// Create an Observer:
// php artisan make:observer UserObserver --model=User
// app/Observers/UserObserver.php
namespace App\Observers;

use App\Models\User;
use Illuminate\Support\Facades\Log;
// use Illuminate\Support\Facades\Mail;
// use App\Mail\WelcomeEmail;
// use Illuminate\Support\Facades\Storage;

class UserObserver
{
    public function creating(User $user)
    {
        // Set a default value or perform validation before creation
        if (empty($user->status)) {
            $user->status = 'active';
        }
    }

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

    public function updating(User $user)
    {
        // Log changes before they are saved
        if ($user->isDirty('email')) {
            Log::info("User {$user->id} email is changing from {$user->getOriginal('email')} to {$user->email}.");
        }
    }

    public function deleted(User $user)
    {
        // Clean up related resources after deletion
        // Storage::deleteDirectory("users/{$user->id}");
        Log::warning("User {$user->id} deleted.");
    }
}

// Register the Observer (e.g., in AppServiceProvider.php's boot method):
// 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()
    {
        User::observe(UserObserver::class);
    }
}

// Example Usage (the observer automatically runs):
$user = User::create(['name' => 'John Doe', 'email' => '[email protected]']); // `creating` and `created` run
$user->email = '[email protected]';
$user->save(); // `updating` and `updated` run
$user->delete(); // `deleting` and `deleted` run
How it works: This snippet demonstrates Laravel Eloquent Model Observers, a powerful way to centralize event-driven logic for model lifecycle events. An observer is a class with methods corresponding to various model events (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). When a model like `User` triggers an event, the corresponding observer method is automatically executed, allowing you to perform tasks such as setting default values, logging changes, sending notifications, or cleaning up related resources. Observers are registered using the `observe()` method, typically within 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