PHP

Using Eloquent Model Events and Observers for Lifecycle Hooks

Hook into your Laravel Eloquent models' lifecycle events like creating, updating, and deleting to perform actions automatically, centralizing logic with model observers.

<?php

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

use App\Models\User;

class UserObserver
{
    /**
     * Handle the User "created" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function created(User $user)
    {
        // For example, assign a default role or send a welcome email
        $user->profile()->create(['bio' => 'New user profile.']);
        // Mail::to($user->email)->send(new WelcomeEmail($user));
    }

    /**
     * Handle the User "updated" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function updated(User $user)
    {
        // Log changes or invalidate caches
        // Log::info('User updated: ' . $user->id);
    }

    /**
     * Handle the User "deleted" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function deleted(User $user)
    {
        // Clean up related data, e.g., delete user's posts
        // $user->posts()->delete();
    }
}

// app/Providers/AppServiceProvider.php (or dedicated ObserverServiceProvider)
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);
    }
}

// Usage Example
$user = User::create(['name' => 'John Doe', 'email' => '[email protected]', 'password' => 'password']);
// The 'created' observer method is automatically triggered.

$user->name = 'Jonathan Doe';
$user->save();
// The 'updated' observer method is automatically triggered.

$user->delete();
// The 'deleted' observer method is automatically triggered.
How it works: Eloquent model events fire when specific actions occur on a model (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). Observers provide a centralized and cleaner way to group event listeners for a specific model. Instead of defining closures in the model's `boot` method, you create a dedicated Observer class with methods named after the events (e.g., `created`, `updated`). These observers are then registered, typically in a service provider, to automatically execute their logic when the corresponding model event is fired.

Need help integrating this into your project?

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

Hire DigitalCodeLabs