← Back to all snippets
PHP

Automating Actions with Laravel Eloquent Model Events and Observers

Learn to use Eloquent model events and observers to automatically perform actions like logging or data manipulation when models are created, updated, or deleted.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // ... model definition ...
}

// 1. Define an Observer Class
// php artisan make:observer UserObserver --model=User
class UserObserver
{
    public function creating(User $user)
    {
        // Fires before a User is created
        logger("Creating user: " . $user->email);
        // $user->uuid = (string) Str::uuid(); // Example: set a UUID
    }

    public function created(User $user)
    {
        // Fires after a User has been created
        logger("User created: " . $user->id);
        // SendWelcomeEmail::dispatch($user); // Example: dispatch a job
    }

    public function updating(User $user)
    {
        // Fires before a User is updated
        logger("Updating user: " . $user->id);
    }

    public function updated(User $user)
    {
        // Fires after a User has been updated
        logger("User updated: " . $user->id);
    }

    public function deleting(User $user)
    {
        // Fires before a User is deleted
        logger("Deleting user: " . $user->id);
    }

    public function deleted(User $user)
    {
        // Fires after a User has been deleted
        logger("User deleted: " . $user->id);
    }

    // Other events: saving, saved, restoring, restored, retrieving, forceDeleting, forceDeleted
}

// 2. Register the Observer (typically in App\Providers\EventServiceProvider)
// In your EventServiceProvider's boot method:
// use App\Models\User;
// use App\Observers\UserObserver;
// User::observe(UserObserver::class);
How it works: Eloquent model events provide hooks into a model's lifecycle (e.g., `created`, `updated`, `deleted`). Observers allow you to centralize event listeners for a given model into a single class. Instead of scattering event logic across multiple places, an Observer class consolidates all reactions to a model's events. This pattern promotes clean code and separation of concerns, making it easier to manage complex side-effects like logging, sending notifications, or performing data cleanup whenever a model changes state.

Need help integrating this into your project?

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

Hire DigitalCodeLabs