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.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs