0
0
Laravelframework~5 mins

Model events and observers in Laravel

Choose your learning style9 modes available
Introduction

Model events let you run code automatically when something happens to your data. Observers help organize this code neatly.

You want to send a welcome email when a new user signs up.
You need to log changes whenever a product is updated.
You want to clean up related data when a record is deleted.
You want to automatically set a value before saving a model.
You want to keep your code organized by separating event logic.
Syntax
Laravel
php
// Creating an observer class
class UserObserver {
    public function created(User $user) {
        // code to run after a user is created
    }

    public function updated(User $user) {
        // code to run after a user is updated
    }
}

// Registering the observer in a service provider
User::observe(UserObserver::class);

Observer methods match model events like created, updated, deleted.

Register observers usually in AppServiceProvider or a dedicated provider.

Examples
This observer deletes all comments before a post is deleted.
Laravel
php
class PostObserver {
    public function deleting(Post $post) {
        // Remove related comments before deleting a post
        $post->comments()->delete();
    }
}

Post::observe(PostObserver::class);
This observer sends a notification after a new order is created.
Laravel
php
class OrderObserver {
    public function created(Order $order) {
        // Send notification when order is created
        Notification::send($order->user, new OrderPlaced($order));
    }
}

Order::observe(OrderObserver::class);
Sample Program

This example shows a User model and a UserObserver that logs a message when a user is created. The observer is registered in the AppServiceProvider.

Laravel
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // User model code
}

namespace App\Observers;

use App\Models\User;
use Illuminate\Support\Facades\Log;

class UserObserver
{
    public function created(User $user)
    {
        Log::info("User created: {$user->email}");
    }
}

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);
    }
}

// When a new user is created, a log entry is made automatically.
OutputSuccess
Important Notes

Model events include: creating, created, updating, updated, deleting, deleted, saving, saved, restoring, restored.

Observers keep your code clean by separating event logic from models.

Remember to register observers to activate them.

Summary

Model events let you run code when data changes.

Observers organize event code in separate classes.

Register observers to connect them with models.