🐈

親のモデルの更新日時を自動で更新する

2021/11/19に公開

リレーションを貼っているモデルで、子モデルが更新された時に子モデルのupdated_atカラムが更新されるのは当然ですが、その際に親モデルのupdated_atも更新したい場合があります。

その場合には子モデルに touches という変数を作ってあげればOKです!

例えば articles テーブルと comments テーブルがあるとして、
コメントが更新されたり新しいコメントが投稿された場合に、 articlesテーブルのupdated_atを更新します。

public function Comment extends Model
{
    .
    .
    .
    protected $touches = ['article'];
    
    public function article ()
    {
        return $this->belongsTo(Article::class, 'article_id', 'id');
    }
}

このようにリレーションを明記した上で touches に入れるだけで、親のモデルのupdated_atが更新されることになります。

Discussion