PHP
Automate Actions with Eloquent Model Events and Observers
Trigger custom logic automatically before or after Eloquent model operations like creating, updating, or deleting using events or observers.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Events\UserCreated; // Assume this event exists
class User extends Model
{
use HasFactory;
protected $fillable = ['name', 'email', 'password'];
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::created(function (User $user) {
// Logic to execute after a user is created
// For example, send a welcome email or dispatch an event
// Mail::to($user->email)->send(new WelcomeEmail($user));
// event(new UserCreated($user));
logger("User '{$user->name}' was created with ID: {$user->id}");
});
static::updating(function (User $user) {
// Logic to execute before a user is updated
// For example, log changes or validate data
logger("User '{$user->name}' (ID: {$user->id}) is about to be updated.");
});
// You can register many events: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored, retrieved
}
}
// Usage:
// $user = User::create(['name' => 'John Doe', 'email' => '[email protected]', 'password' => bcrypt('password')]);
// // The 'created' event listener above will run automatically.
// $user->name = 'Jane Doe';
// $user->save();
// // The 'updating' event listener above will run automatically before saving.
How it works: Eloquent model events allow you to hook into various stages of a model's lifecycle (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). By defining static methods like `booted()` and registering closures, you can execute custom logic, dispatch events, or perform validation automatically when a model undergoes these operations, centralizing and decoupling business logic. For more complex scenarios, you can use Model Observers.