Laravelのオブザーバーが便利だった
2021.08.31
オブザーバーを使って、モデルのCRUDイベントキャッチしようという試み
オブザーバーを使う目的
「データに手を加えたユーザーを記録したい」という要望があり、
データの作成者、編集者、削除者を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に呼び出すだけで
共通の処理ができる事です。便利なので機会があれば今後も使いたいですね。