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.