0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】softDeleteでリレーション先のレコードも削除したい

Last updated at Posted at 2024-07-06

タイトルのとおりですが、今回は論理削除時の話です。
物理削除は記事最後の「番外」部分に書いております。

やりたいこと

親テーブル => 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');

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?