Laravel Model Events and Observers Tutorial
Laravel dispatches many model events that help us to listen to many model lifecycles like created, updated, saved, deleting, deleted, and more. If you want to listen to more events of a specific model, then you can create an Observer class to group all the events into a single class.
To set up a Laravel model Observers, follow the below steps.
- Create model Observer class
- Add listeners for different events
- Register observer in service provider
Before diving deep into the above steps in this tutorial, I would like to look into some model events.
Here are some different model events available in Laravel.
creating | Triggered just before the record is getting saved for the first time. |
created | Triggered after a new record was created and saved. |
updating | Triggered just before an existing record is getting updated. |
updated | Triggered after an existing record was updated. |
saving | Triggered just before the record is saved (for both new and existing records). |
saved | Triggered after the record has been saved (for both new and existing records). |
deleting | Triggered just before a record is getting deleted. |
deleted | Triggered after a record was deleted. |
restoring | Triggered just before a soft-deleted record is going to be restored. |
restored | Triggered after a soft-deleted record was restored. |
You can listen to the created event in the model class as given below.
protected static function boot()
{
parent::boot();
static::created(function ($user) {
$user->uuid = "some_random_string";
$user->save();
});
}
If you are going to listen to many model events, then you can go for model Observers in Laravel.
Model Observers are separate classes that observe many events of specific Eloquent models. When an event is triggered on an eloquent model, the corresponding method in its observer will be executed. Each method in the observer class receives the affected model object as its argument.
Create model Observer Class
In our example, we are going to create an Observer class for the User model. The make:observer Artisan command helps us to create a new observer class.
php artisan make:observer UserObserver --model=User
This will create a file UserObserver.php in app/Observers/ folder. If the Observers folder does not exist, then the above command will create a new folder for you.
Add listeners for different model events
A new Observer class will look like this:
<?php
namespace App\Observers;
use App\Models\User;
class UserObserver
{
/**
* Handle the User "created" event.
*
* @param \App\Models\User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Handle the User "updated" event.
*
* @param \App\Models\User $user
* @return void
*/
public function updated(User $user)
{
//
}
/**
* Handle the User "deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user)
{
//
}
/**
* Handle the User "restored" event.
*
* @param \App\Models\User $user
* @return void
*/
public function restored(User $user)
{
//
}
/**
* Handle the User "force deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function forceDeleted(User $user)
{
//
}
}
You can add more observer actions in this class for model events like retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, trashed, forceDeleting, forceDeleted, restoring, restored, and replicating.
Register observer in service provider
The next step is to register the observer class in the EventServiceProvider. Go to the App\Providers\EventServiceProvider service provider and register the Observer in the boot method as given below.
use App\Models\User;
use App\Observers\UserObserver;
/**
* Register any events for your application.
*/
public function boot(): void
{
User::observe(UserObserver::class);
}
By adding the above codes, UserObserver will observe the model event for the User model.
Model observers can be used to perform various tasks such as updating a cache or sending an email notification need to happen when a specific event occurs on a model.
Conclusion
Laravel model Observers listen to many events happening in a specific Eloquent model to perform various tasks. Use make:observer Artisan command to create a new Observer class file. Add methods to handle different events on this file. Finally, register the observer class in the boot method of EventServiceProvider.
On datainfinities.com, Read articles all around JavaScript, React, Node.js, PHP, Laravel, and Shopify.
Related Blogs
The POST method is not supported for this route. Supported methods: GET, HEAD
Laravel Cron Job Task Scheduling Tutorial
Get raw SQL query from Laravel Query Builder
How to create multiple where clause query using Laravel eloquent
Laravel Order by Pivot Table Field
How to solve error: array_merge() does not accept unknown named parameters
Delete an element from an array in PHP
419 page expired error in Laravel
Explore All Blogs