PHP

Centralizing Logic with Eloquent Model Observers

Learn to use Laravel Eloquent Observers to centralize and manage logic that responds to model lifecycle events like creating, updating, or deleting across your application.

// app/Observers/ProductObserver.php
namespace App\Observers;

use App\Models\Product;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;

class ProductObserver
{
    /**
     * Handle the Product "creating" event.
     */
    public function creating(Product $product): void
    {
        $product->slug = Str::slug($product->name);
        Log::info("Product creating: {$product->name}");
    }

    /**
     * Handle the Product "created" event.
     */
    public function created(Product $product): void
    {
        // For example, invalidate a cache related to products
        // Cache::forget('all_products');
        Log::info("Product created: {$product->name} with ID {$product->id}");
    }

    /**
     * Handle the Product "updated" event.
     */
    public function updated(Product $product): void
    {
        if ($product->isDirty('price')) {
            Log::warning("Product price changed for {$product->name} from {$product->getOriginal('price')} to {$product->price}");
        }
    }

    /**
     * Handle the Product "deleted" event.
     */
    public function deleted(Product $product): void
    {
        Log::info("Product deleted: {$product->name} (ID: {$product->id})");
    }
}

// app/Providers/AppServiceProvider.php (in boot method)
namespace App\Providers;

use App\Models\Product;
use App\Observers\ProductObserver;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Product::observe(ProductObserver::class);
    }
}
How it works: Eloquent Observers provide a clean way to group listeners for model events. This snippet shows how to create a `ProductObserver` that listens for `creating`, `created`, `updated`, and `deleted` events on the `Product` model. For instance, before a product is created, its slug is automatically generated. After creation, a log entry is made. The observer is registered in `AppServiceProvider`, centralizing event-driven logic.

Need help integrating this into your project?

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

Hire DigitalCodeLabs