みなさん、こんにちは。
最近は特に朝晩は冷えて布団から出たくない季節になりましたね。
今年も残すところあと2か月切ったとなると恐ろしいです。。。
今回は、laravelで登録・更新・削除ユーザを登録時や更新時、削除時に自動で登録する処理についてまとめます。
抽象クラス「BaseModel.php」を作成
まず、汎用的に使えるように抽象クラス「BaseModel.php」を作成します。
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
abstract class BaseModel extends Model
{
// ...
}
「BaseModel」にbootメソッドを追加
bootメソッドとは、Eloquentの初回呼び出し時に初期設定を行うものです。
グローバルスコープやイベントの設定をすることができます。
以下の内容を「BaseModel」に記述します。
protected static function boot()
{
parent::boot();
// 登録時
static::creating(function ($model) {
$model->created_id = Auth::id();
$model->updated_id = Auth::id();
});
// 更新時
static::updating(function ($model) {
$model->updated_id = Auth::id();
});
// 削除時
static::deleted(function ($model) {
$model->deleted_id = Auth::id();
$model->save();
});
}
「creating」や「updating」のイベントは、save()しなくても登録してくれますが、
「deleting」や「deleted」のイベントはsave()をしないとユーザを登録してくれないので注意が必要です。
class Sample extends BaseModel
{
// ...
}
このように先ほど作成した「BaseModel」をモデルに継承すると、
自動で登録・更新ユーザ等をデータベースに登録してくれるようになります。
毎回記述するとなると大変だったり、抜け漏れがあったりすることもありますが、
ここに追加するだけで自動で登録してくれるとなると便利ですよね。
《参考》
https://qiita.com/suzuki_web/items/52b1294260bbe6caec66