Sitemap
Umer Ghouri

Umer Ghouri

A competent PHP/Laravel developer with extensive experience in the layout, design, and coding of websites specifically in PHP

Laravel 12 Model Observers Tutorial With Basic Example

3 min readApr 27, 2025

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

  1. created() it calls when post create
  2. updated() it calls when post update
  3. deleted() it calls when post delete
  4. restored() it call when post restore
  5. 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

Press enter or click to view image in full size

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 :)

--

--

Umer Ghouri
Umer Ghouri

Written by Umer Ghouri

A competent PHP/Laravel developer with extensive experience in the layout, design, and coding of websites specifically in PHP