How to register a default Observer for every Model instance with Laravel

Instead of extending model - write your own trait which will work as observer.
Below I wrote some basic trait:

<?php

namespace App\YourPackage\Traits;

use Illuminate\Database\Eloquent\Model;

trait Observable
{
    public static function bootObservable()
    {
        static::updating(function (Model $model) {
            dd('updating');
        });
    }
}

and use it by typing use Observable; in your model class.

Also for your learning take a note how traits is booting: You have to put boot[TraitClassName] method into trait, to boot it properly.
Never write boot method inside your trait, it's dangerous!


Why not simply extend a parent class say BaseObserver

I have something similar in my caching system

<?php namespace App\Observers;
class BaseObserver {
    public function saving($model)
    {
        //do your thing here that apply to all observers, like caching
    }
}

Then in your Observers

<?php namespace App\Observers;
class Quotation extends BaseObserver{
   //you can override any of the methods if you wish
}