Laravelでリレーションのあるレコードを全て削除する

ツイート
2021年07月18日
2021年07月19日

前提

  • 対象のモデルにhasMany()belongsTo()が定義されていること

基本形

php
$user = User::find(1); $user->posts()->each(function($post) { $post->delete(); });

もしくは

php
$user = User::find(1); $user->posts()->delete();

応用形

Surveyモデルを削除した際に、一気通貫でAnswerSetまで削除する。

モデル

サーベイ機能

コード

php
DB::beginTransaction(); try { $survey = Survey::find(1); $survey->survey_schedules()->each(function($survey_schedule) { $survey_schedule->survey_answer_sets()->each(function($survey_answer_set) { $survey_answer_set->survey_answers()->each(function($survey_answer) { $survey_answer->delete(); }); $survey_answer_set->delete(); }); $survey_schedule->delete(); }); $survey->delete(); DB::commit(); } catch (\Exception $e) { echo($e->getMessage()); DB::rollback(); }

参考