PHP

Automate Logic on Model Events with Eloquent Observers

Implement Eloquent Observers to centralize and automate logic that needs to run when models are created, updated, deleted, or other lifecycle events occur in Laravel.

<?php

namespace App\Observers;

use App\Models\User;

class UserObserver
{
    /**
     * Handle the User 'creating' event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function creating(User $user)
    {
        // Automatically hash password before saving a new user
        if (isset($user->password)) {
            $user->password = bcrypt($user->password);
        }
    }

    /**
     * Handle the User 'created' event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function created(User $user)
    {
        // Log user creation or send a welcome email
        // Log::info('New user created: ' . $user->email);
        // Mail::to($user->email)->send(new WelcomeEmail($user));
    }

    /**
     * Handle the User 'deleted' event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function deleted(User $user)
    {
        // Clean up related resources (e.g., remove user's files)
        // Storage::deleteDirectory('users/' . $user->id);
    }
}

// In AppServiceProvider.php (or a dedicated ObserverServiceProvider):
// use App\Models\User;
// use App\Observers\UserObserver;
// public function boot()
// {
//     User::observe(UserObserver::class);
// }
How it works: Eloquent Observers provide a clean, centralized way to group event listeners for a specific model. Instead of scattering event logic across multiple places, an observer class contains methods that respond to various model lifecycle events such as `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`, etc. Each method receives the affected model instance. This pattern is excellent for maintaining separation of concerns, ensuring consistent behavior across your application, and making your models cleaner by abstracting away cross-cutting concerns like logging, caching invalidation, or data sanitation.

Need help integrating this into your project?

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

Hire DigitalCodeLabs