オブザーバーを使う目的

「データに手を加えたユーザーを記録したい」という要望があり、
データの作成者、編集者、削除者をDBに保存することになりました。

やること

DBの各テーブルにcreator,editor,deleterカラムを追加

マイグレーションファイル作成
(例)

php artisan make:migration add_creator_editor_deleter_to_all_table

Observer.phpを作成してCRUDイベントをキャッチ

namespace App\Observers;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class xxxObserver
{
    public function created(Model $model)
    {
      // データ保存後に作成者を登録する処理
    }

    public function updated(Model $model)
    {
      // データ更新後に編集者を登録する処理
    }

    public function deleted(Model $model)
    {
      // データ削除後に削除者を登録する処理
    }
}

Traitを作成してObserverが動くようにする

namespace App\Traits;

use App\Observers\xxxObserver;

trait xxxObservable
{
    public static function bootxxxObservable()
    {
        self::observe(xxxObserver::class);
    }
}

あとはModelで召喚するだけ

namespace App\Models;

use App\Traits\xxxObservable; //さっきつくったTrait
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use xxxObservable;
    // 略
}

流れ自体は意外と簡単でした。
何より良いことは、ひとつオブザーバーを作成して任意のModelに呼び出すだけで
共通の処理ができる事です。便利なので機会があれば今後も使いたいですね。