How to Use Laravel Observers

How to Use Laravel Observers

How to Use Laravel Observers

Observers centralise model event handling — creating, updating, deleting — without cluttering the model itself.

Step 1 — Create the Observer

php artisan make:observer OrderObserver --model=Order

Step 2 — Define Event Methods

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

use App\Models\Order;
use Illuminate\Support\Facades\Log;

class OrderObserver
{
    public function created(Order $order): void
    {
        Log::info("Order #{$order->id} created for customer {$order->customer_id}");
    }

    public function updated(Order $order): void
    {
        if ($order->wasChanged('status')) {
            // notify customer of status change
        }
    }

    public function deleted(Order $order): void
    {
        // archive or clean up related records
    }
}

Step 3 — Register the Observer

// app/Providers/AppServiceProvider.php
use App\Models\Order;
use App\Observers\OrderObserver;

public function boot(): void
{
    Order::observe(OrderObserver::class);
}

Step 4 — Skip Observer When Needed

// Bypass observers for bulk operations
Order::withoutObservers(function () {
    Order::where('status', 'old')->update(['archived' => true]);
});
All Comments