PHP
Automate Tasks with Eloquent Model Observers
Leverage Eloquent model observers to centralize logic for reacting to various model lifecycle events like creating, updating, deleting, and more, improving code organization.
// app/Observers/UserObserver.php
namespace App\Observers;
use App\Models\User;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
class UserObserver
{
public function created(User $user)
{
// Send welcome email after a new user is created
Mail::to($user->email)->send(new WelcomeEmail($user));
// Log::info("User {$user->id} created, welcome email sent.");
}
public function updated(User $user)
{
// Perform action after a user is updated
if ($user->isDirty('email')) {
// Email changed, maybe require re-verification
// Log::info("User {$user->id} email changed to {$user->email}.");
}
}
public function deleted(User $user)
{
// Clean up related data when a user is deleted
// $user->posts()->delete();
// Log::info("User {$user->id} deleted.");
}
}
// app/Providers/AppServiceProvider.php (or a dedicated ObserverServiceProvider)
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\User;
use App\Observers\UserObserver;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
}
}
// Example usage (Observer hooks automatically)
// $user = User::create(['name' => 'John Doe', 'email' => '[email protected]', 'password' => bcrypt('password')]);
// $user->name = 'Jane Doe';
// $user->save();
// $user->delete();
How it works: This snippet demonstrates how to use Eloquent Observers to react to model lifecycle events. An observer class (`UserObserver`) centralizes logic for events like `created`, `updated`, or `deleted`. By registering the observer in a service provider (e.g., `AppServiceProvider`), these methods are automatically triggered whenever a `User` model is created, updated, or deleted. This pattern keeps business logic clean and separated from models and controllers, making it ideal for tasks such as sending welcome emails, logging changes, or cleaning up related data.