Laravel 12 Model Observers Tutorial With Basic Example
Laravel Observers are used to group event listeners for a model eloquent. Laravel Observers will listener event for model eloquent method like create, update and delete.
for example when model is create , update , delete and you want to perform specific action when this events call then you can use observers
Lets create a Post model and its migreation
php artisan make:model Post -m
this is migraiton column
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->string('title');
$table->text('description');
$table->string('slug')->after('description')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
//
});
}
};lets see post model
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class Post extends Model
{
use HasFactory ,SoftDeletes;
protected $guarded = [];
}lets create a post model observer
php artisan make:observer PostObserver — model=Post
Now Manually register Observer in Boot Method Of AppServiceProvider
import both classes at top in AppServiceProvider
Post::observe(PostObserver::class);this will create a PostObserver class in app\Observers directory
Get Umer Ghouri’s stories in your inbox
Join Medium for free to get updates from this writer.
postObservers bydefault have 5methods
- created() it calls when post create
- updated() it calls when post update
- deleted() it calls when post delete
- restored() it call when post restore
- forceDeleted() it call when post forceDelete
lets see PostObserver class
<?php
namespace App\Observers;
use App\Models\Post;
class PostObserver
{
/**
* Handle the Post "created" event.
*/
public function created(Post $post): void
{
//
}
/**
* Handle the Post "updated" event.
*/
public function updated(Post $post): void
{
//
}
/**
* Handle the Post "deleted" event.
*/
public function deleted(Post $post): void
{
//
}
/**
* Handle the Post "restored" event.
*/
public function restored(Post $post): void
{
//
}
/**
* Handle the Post "force deleted" event.
*/
public function forceDeleted(Post $post): void
{
//
}
}now we want when our post is create then post title bocomes it slug and this slug code we add in PostObserver class created() method . bcz it call when post create
<?php
namespace App\Observers;
use App\Models\Post;
class PostObserver
{
/**
* Handle the Post "created" event.
*/
public function created(Post $post): void
{
$post->slug = \Str::slug($post->title);
$post->save();
}
/**
* Handle the Post "updated" event.
*/
public function updated(Post $post): void
{
//
}
/**
* Handle the Post "deleted" event.
*/
public function deleted(Post $post): void
{
//
}
/**
* Handle the Post "restored" event.
*/
public function restored(Post $post): void
{
//
}
/**
* Handle the Post "force deleted" event.
*/
public function forceDeleted(Post $post): void
{
//
}
}you can see changes in created method
public function created(Post $post): void
{
$post->slug = \Str::slug($post->title);
$post->save();
}now we creat a test post
Post::create([
'user_id'=>1,
'title'=>'this is title',
'description'=>'helo this is description',
]);when post is create then it slug also created bcz observer listen
same you can use observer other method.. for example deleted method we want to use when post delete then its comment also delete… we add comment delete logic in deleted() method in observer
you can email me on this umerfayyaz500@gmail.com if you need any help regarding this
Thanks for reading… keep work hard :)










