Observers centralise model event handling — creating, updating, deleting — without cluttering the model itself.
php artisan make:observer OrderObserver --model=Order
// 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
}
}
// app/Providers/AppServiceProvider.php
use App\Models\Order;
use App\Observers\OrderObserver;
public function boot(): void
{
Order::observe(OrderObserver::class);
}
// Bypass observers for bulk operations
Order::withoutObservers(function () {
Order::where('status', 'old')->update(['archived' => true]);
});
All Comments