Hi,In this tutorial, i will show you laravel model event custom functions. i would like to share with you create custom model events laravel. i explained simply about laravel custom model events. In this article, we will implement a how to create custom model events in laravel. follow bellow step for laravel create custom model event.
we can create custom model event in laravel 6, laravel 7 and laravel 8 version.
Sometime, we need to add specific task when your post or product will status become active, when it become active you need to send email or update timestamps etc. so here i will give you very simple example here, when product status will change active then we will update activated_at timestamp and send email using model custom event.
let's see example:
Create Product Model
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', 'status', 'activated_at'
];
protected $observables = ['activated'];
/**
* Write code on Method
*
* @return response()
*/
public function makeActive()
{
$this->update(['status' => 2]);
$this->fireModelEvent('activated', false);
}
}
Create Observer Class
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 activated(Product $product)
{
$product->activated_at = now();
$product->save();
/*
You can perform what you want here:
\Log::info('Call Activated Event Function: '. $product->id);
\Mail::to($product->user->email)->view('some.email');
*/
}
}
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 listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
Product::observe(ProductObserver::class);
}
}
Create Controller Code
app/Http/Controllers/ProductController.php
<?php
namespace App\Http\Controllers;
use App\Models\Product;
class SignaturePadController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index()
{
$product = Product::find(1);
$product->makeActive();
dd($product);
}
}
now you can try it and check it.
i hope it can help you...
Do you like below Tutorials ?
- How to Display Data in Angular 10?
- Angular 10 Routing Module Example Tutorial
- Angular 10 CRUD Operations with Web API Example
- Laravel 8 CRUD Operation Step By Step Tutorial
- Solved - Target class [ProductController] does not exist in Laravel 8
- Step by Step Form Validation in Laravel 8 Example
- Laravel 8 Image Upload with Preview Example
- Laravel 8 Multiple Images Upload with Preview Example