🦔
[Laravel]Bootメソッドで関連しているデータを消すのが便利だった
はじめに
本記事は、筆者による理解の復習・確認やアウトプットの練習のために書いております。
間違った解釈等ございましたら、ご連絡いただけますと幸いです。
前提
Article.php
public function comment()
{
return $this->hasMany(Comment::class, 'article_id');
}
記事(Article)とコメント(Comment)というテーブルがあり、
1(Article):N(Comment)の関連付けがされている状態。
結論
Article.php
protected static function boot()
{
parent::boot();
static::deleting(function ($article) {
$article->comment()->delete()
});
}
を書いておくと、該当のArticleを削除する際に紐づいているCommentを同じタイミングで削除してくれます。
ArticleController.php
public function delete(Request $request)
{
DB::beginTransaction();
try {
$article = Article::where('id', $request->id)->first();
$article->delete(); // このタイミングでcommentも一緒に削除されます。
DB::commit();
} catch (\Exception $e) {
// 省略
}
}
deleting
の他にもcreating
やupdating
など、Eloquentモデルのイベントを使って用途に合わせた記述を行えます。
参考
Discussion