🚀
Laravelで履歴テーブルに履歴を取る方法
実装
EloquentModel内にモデルイベントで実装する
protected static function booted()
{
static::created(function (Post $post) {
$post->postHistories()->create($post->toArray());
});
static::updated(function (Post $post) {
$post->postHistories()->create($post->toArray());
});
}
今回は作成時と更新時に履歴を取りたかったので、イベントリスナーでcreated
とupdated
を使いました。
このようにすることで、各レポジトリ内で作成や更新が実行されると自動で履歴テーブルに保存されるようになります。
$post->postHistories()
の部分は下記のようにリレーションで設定しています。
public function postHistories(): HasMany
{
return $this->hasMany(PostHistory::class, 'post_id', 'post_id');
}
感想
Laravel Auditingを最近知って、これで履歴取ればいいかと思いましたが、
Auditingは主に監査用で使われ、誰がどんな変更を行なったのかを確認するの使い、
システム要件としての履歴を取りたいとはまた違うなと思い、今回の方法を取りました。
Discussion