PHP

Leveraging Eloquent Model Events and Observers

Automate tasks and ensure data integrity using Laravel Eloquent model events or dedicated observers to react to model lifecycle actions (creating, updating, deleting).

// app/Models/Product.php
namespace App/Models;

use Illuminate/Database/Eloquent/Model;

class Product extends Model
{
    protected $fillable = ['name', 'price', 'slug'];

    protected static function booted(): void
    {
        static::creating(function (Product $product) {
            // Generate a slug before creation
            $product->slug = \Illuminate\Support\Str::slug($product->name);
        });

        static::updated(function (Product $product) {
            // Log activity on update
            \Log::info("Product {$product->id} updated: {$product->name}");
        });
    }
}

// OR using an Observer:
// app/Observers/ProductObserver.php
namespace App/Observers;

use App/Models/Product;
use Illuminate/Support/Str;
use Log;

class ProductObserver
{
    public function creating(Product $product): void
    {
        $product->slug = Str::slug($product->name);
    }

    public function updated(Product $product): void
    {
        Log::info("Product {$product->id} updated by observer: {$product->name}");
    }
}

// Registering the observer (e.g., in AppServiceProvider.php's boot method):
// use App/Observers/ProductObserver;
// use App/Models/Product;
// Product::observe(ProductObserver::class);

// Usage example:
$product = Product::create(['name' => 'Awesome Gadget', 'price' => 99.99]);
echo $product->slug; // Output: awesome-gadget

$product->update(['name' => 'Super Gadget']); // Triggers 'updated' event
How it works: Eloquent models fire several events at different points in their lifecycle (e.g., `creating`, `created`, `updating`, `updated`, `deleting`, `deleted`). You can hook into these events directly within the model's `booted` method using static closures, or by creating dedicated 'Observer' classes. Observers centralize event listeners into a single class, making your models cleaner and logic more organized, especially for complex event handling and automation.

Need help integrating this into your project?

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

Hire DigitalCodeLabs