MODEL OBSERVERS

Last updated: June 29th 2026

MODEL OBSERVERS

Observers let you hook into your model's lifecycle events to run custom logic whenever a record is created, updated, deleted, restored, or force-deleted.

Get Started

Creating an Observer

Use the CLI command to generate an observer class:

php cli make:observer User

This creates app/Observers/UserObserver.php:


namespace App\Observers;

use Simple\Model;

class UserObserver
{
    public function created(User $user)
    {
        // Send welcome email
    }

    public function updated(User $user)
    {
        // Log changes
    }

    public function deleted(User $user)
    {
        // Clean up related data
    }

    public function restored(User $user)
    {
        // Re-index search
    }

    public function forceDeleted(User $user)
    {
        // Permanently removed
    }
}
                            

Available Lifecycle Events

Each observer method receives the model instance as its only argument:

Method Fires When
created A new record is inserted into the database
updated An existing record's attributes are changed and saved
deleted A record is deleted (soft deletes included)
restored A soft-deleted record is restored
forceDeleted A record is permanently force-deleted

Registering an Observer

Observers must be registered in app/Providers/EventServiceProvider.php inside the boot() method:


namespace App\Providers;

use App\Observers\UserObserver;
use App\Models\User;

class EventServiceProvider
{
    public function boot()
    {
        User::observe(UserObserver::class);
    }
}
                            

The framework automatically calls EventServiceProvider::boot() on every request, so your observer is active immediately.

Full Example

Send a welcome email after a user signs up:


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

use App\Models\User;
use Simple\Mail;

class UserObserver
{
    public function created(User $user)
    {
        $subject = 'Welcome to our platform!';
        $message = "Hi {$user->name}, thanks for joining!";
        Mail::send($user->email, $subject, $message);
    }

    public function updated(User $user)
    {
        if ($user->wasChanged('email')) {
            // Send email verification
        }
    }
}
                            

How It Works

The observer system is built on Laravel's Eloquent ORM, which is included with the framework:

  • Simple\Database\Connection wires up Illuminate\Events\Dispatcher when the database connects
  • Eloquent's Model::observe() method registers the observer for the given model's lifecycle events
  • Simple\Request automatically boots EventServiceProvider on each request
  • Observer methods are called automatically when the corresponding model event fires