Copy & Paste Engineer

【Laravel】データ保存時に created_by, updated_by, delete_by を自動的に追加する方法

【Laravel】データ保存時に created_by, updated_by, delete_by を自動的に追加する方法

Laravelでデータ保存時に created_by, updated_by, delete_by の登録者、更新者、削除者を自動的に追加する方法

サンプル

boot メソッドに各イベント時の動作を設定します。 creating, updating, saving, deleting のイベント時に設定されています。

ただ1つ問題があり softDelete の動作です。 softDeletedelete 実行時に deleted_at だけを更新するようになっています。 そのため deleting に関しては $model->update() をして明示的に更新を行う必要があります。

<?php

namespace App\Models;

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

class SampleModel extends Model
{
    public static function boot(): void
    {
        parent::boot();
        static::creating(function ($model) {
            $model->created_by = Auth::user()->id ?? null;
        });
        static::updating(function ($model) {
            $model->updated_by = Auth::user()->id ?? null;
        });
        static::saving(function ($model) {
            $model->updated_by = Auth::user()->id ?? null;
        });
        static::deleting(function ($model) {
            $model->deleted_by = Auth::user()->id ?? null;
            $model->update();
        });
    }
}

メモ

Observerでやる方法もあります。 How to automaticly update updated_by, created_by fields using Eloquent?

参考