タイトルのとおりですが、今回は論理削除時の話です。
物理削除は記事最後の「番外」部分に書いております。
やりたいこと
親テーブル => companies(会社)
子テーブル => postings(投稿)
例えば「A社」を削除したら、「A社」が登録している投稿も一緒に削除したい
結論
子テーブルのモデルにwithTrashed()
を加えるだけです。
app/Models/Posting.php
// リレーション部分だけ抽出
public function company()
{
return $this->belongsTo(Company::class)->withTrashed();
}
これでやりたいことが実現できます。
めちゃくちゃ便利ですね…
他にもModel内でbootメソッドを使用してやる方法もあるようですが、違いについてはまだ調べてないです…
もしわかったら別途記事にするかもしれません。
番外
ちなみに物理削除で同じことをしたい場合には、マイグレーションファイルの外部キーを設定する際に、以下のようにonDeleteなどを記述します。
$table->foreignId('company_id')
->constrained()
->onUpdate('cascade')
->onDelete('cascade');
以上です。