Tech Magazine

Brief Understanding on Laravel Observers

1 6,393

Get real time updates directly on you device, subscribe now.

In this article, we will discuss Laravel Observers. Laravel provides us to implement the Observer pattern to fire some predefined events, which can be listened to hook into when various actions are performed on a model. No dought, its a great feature of the Laravel. Observer Class, methods receive the model as their only argument. And, Laravel does not include a default directory for observers. It will create dynamically when we create the observer.

Why we need the Laravel Observer?

When you have used Laravel for a medium to large scale project, then you might have encountered a situation where you want to perform some actions while your Eloquent model is processing. Here, Laravel Observers are a convenient way to do this.

List of events given below, which we used in the Observer class:

  • 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.
  • forceDeleted: handle the force deleted event.

I will recommend you to read the official documentation once for more understanding.

Create Laravel Observer

You can use the following command to create an observe class at app/Observers directory.

php artisan make:observer PostObserver --model=Post

After executing the above mention command in the terminal, the observer class will create at the defined location. Note that, by default, the observer directory is not available. But when we create an observer then the Observers directory will be created automatically.

Register Observer

You can register your observers in the boot of the AppServiceProvider as per the following code snippet.

We have successfully configured the observer in our application. But, what is the use of this observer? So assume, we want to make an Audit of the post table and store the user data in the post_audit table. When the user create or update a post then we save the user data in this specific table.

Create Migration / Model

Use the following command to create a migration.

php artisan make:migration create_post_audit_table --create=post_audit

Open your newly created migration and add the required columns.

bigIncrements('id');            $table->integer('post_id');            $table->integer('user');            $table->timestamp('action_at');            $table->string('action');            $table->timestamps();        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('post_audit');    }}

Create a Post Audit Model

Use the following artisan command to create the PostAudit Model.

php artisan make:model App\Models\PostAudit

Open your newly created model and update the model as given below.

Update Observe

As I mentioned above, we are tracking the add and update record so in this Observer class we need to update the created and updated methods.

post_id = $post->id;        $audit->user = 1; //Auth::user()->id;        $audit->action_at = date('Y-m-d H:i:s');        $audit->action = 'Add';        $audit->save();    }    /**     * Handle the post "updated" event.     *     * @param  \App\Post  $post     * @return void     */    public function updated(Post $post)    {        $audit = new PostAudit();        $audit->post_id = $post->id;        $audit->user = 1; //Auth::user()->id;        $audit->action_at = date('Y-m-d H:i:s');        $audit->action = 'Update';        $audit->save();    }    /**     * Handle the post "deleted" event.     *     * @param  \App\Post  $post     * @return void     */    public function deleted(Post $post)    {        //    }    /**     * Handle the post "restored" event.     *     * @param  \App\Post  $post     * @return void     */    public function restored(Post $post)    {        //    }    /**     * Handle the post "force deleted" event.     *     * @param  \App\Post  $post     * @return void     */    public function forceDeleted(Post $post)    {        //    }}

Because Im testing this functionality in the PHP artisan tinker so Im using the static user id 1. As mention, you have to pass the current login user id.

Testing the functionality using tinker

Add Post

Laravel Observer

Update Post

Laravel Observer

In the end, you can see the post_audit table track the action add/update whenever the post model is called.


In this article, Im trying to explain to you the use of Laravel Observer. I hope you like this article and also helpful in your development. Please feel free to ask your query or submit your feedback 😉

You may like:

Laravel Scout with TNTSearch Driver

How to Use Make Auth in Laravel 6

How to Setup Lets Encrypt a Free SSL Certificate

If you like our content, please consider buying us a coffee.
Thank you for your support!
Buy Me a Coffee

Get real time updates directly on you device, subscribe now.

1 Comment
  1. Loga says

    Nice and simple

Leave A Reply

Your email address will not be published.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. AcceptRead More