Laravel 10 Model Observers Example Tutorial
Hey Guys,
This article will give you an example of how to use laravel 10 model observers. I would like to show you laravel 10 observers example. I’m going to show you about what is observers in laravel 10. if you want to see an example of laravel 10 model observers then you are in the right place.
Laravel Observers are used to group event listeners for a model eloquent. Laravel Observers will listener event for a model eloquent method like create, update and delete.
I will give you very simple definition and use of laravel observers is, when you need to generate slug or auto generate unique id or something like logic add before or after create record then observers will help you. i will give you bellow events that provide by observers and simple example bellow:
Eloquent Hook
- Retrieved: after a record has been retrieved.
- Creating: before a record has been created.
- Created: after a record has been created.
- Updating: before a record is updated.
- Updated: after a record has been updated.
- Saving: before a record is saved (either created or updated).
- Saved: after a record has been saved (either created or updated).
- Deleting: before a record is deleted or soft-deleted.
- Deleted: after a record has been deleted or soft-deleted.
- Restoring: before a soft-deleted record is going to be restored.
- Restored: after a soft-deleted record has been restored.
Example:
Now here we will see simple example, i have one product model and it has name, slug, price and unique_id column. so i need to create one record with name an price only. but when it's create i need to generate slug from name and auto generate unique_id.
so let's see how to create observers class and how it will works:
app/Models/Product.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasFactory;
protected $fillable = [
'name', 'price', 'slug', 'unique_id'
];
}
Create observers class for Product. So, create bellow command:
php artisan make:observer ProductObserver --model=Product
app/Observers/ProductObserver.php
<?php
namespace App\Observers;
use App\Models\Product;
class ProductObserver
{
/**
* Handle the Product "created" event.
*
* @param \App\Models\Product $product
* @return void
*/
public function creating(Product $product): void
{
$product->slug = \Str::slug($product->name);
}
/**
* Handle the Product "created" event.
*
* @param \App\Models\Product $product
* @return void
*/
public function created(Product $product): void
{
$product->unique_id = 'PR-'.$product->id;
$product->save();
}
/**
* Handle the Product "updated" event.
*
* @param \App\Models\Product $product
* @return void
*/
public function updated(Product $product): void
{
}
/**
* Handle the Product "deleted" event.
*
* @param \App\Models\Product $product
* @return void
*/
public function deleted(Product $product): void
{
}
/**
* Handle the Product "restored" event.
*
* @param \App\Models\Product $product
* @return void
*/
public function restored(Product $product): void
{
}
/**
* Handle the Product "force deleted" event.
*
* @param \App\Models\Product $product
* @return void
*/
public function forceDeleted(Product $product): void
{
}
}
Register Observers class on provider.
app/Providers/EventServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
use App\Observers\ProductObserver;
use App\Models\Product;
class EventServiceProvider extends ServiceProvider
{
/**
* The event to listener mappings for the application.
*
* @var array
> */
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
/**
* Register any events for your application.
*/
public function boot(): void
{
Product::observe(ProductObserver::class);
}
/**
* Determine if events and listeners should be automatically discovered.
*/
public function shouldDiscoverEvents(): bool
{
return false;
}
}
Create Demo Route:
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('product', [ProductController::class, 'index']);
Create Controller Route:
app/Http/Controllers/ProductController.php
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$product = Product::create([
'name' => 'Platinum 1',
'price' => 10
]);
dd($product);
}
}
now you can run project and see.
it will create record as like bellow:
I hope it can help you...
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- Laravel 10 Get Current Logged in User Data Example
- Laravel 10 Resize Image Before Upload Example
- Laravel 10 Scout Full Text Search Tutorial
- Laravel 10 JQuery UI Ajax Autocomplete Search Example
- How to Get Last Executed Query in Laravel 10?
- Laravel 10 Flash Message Example Tutorial
- Laravel 10 Get Client IP Address Example
- Laravel 10 Cron Job Task Scheduling Tutorial
- Laravel 10 Send Email using Queue Example
- Laravel 10 Mail | Laravel 10 Send Mail Tutorial
- Laravel 10 Auth with Livewire Jetstream Example
- Laravel 10 Auth with Inertia JS Jetstream Example
- Laravel 10 CRUD Application Example Tutorial