Laravelで子関係のレコードを削除する方法


  1. Eloquentの関連メソッドを使用する方法: 例えば、親モデルが「Post」で子モデルが「Comment」という関係の場合、以下のようにコードを記述します。

    $post = Post::find($postId);
    $post->comments()->delete();

    上記の例では、$post->comments()はコメントのリレーションを返し、delete()メソッドを呼び出すことで関連するコメントを一括で削除します。

  2. クエリビルダを使用する方法: クエリビルダを使用して直接データベースにクエリを送信することもできます。以下はその一例です。

    DB::table('comments')->where('post_id', $postId)->delete();

    上記の例では、commentsテーブルからpost_idが指定した値に一致するレコードを削除しています。

  3. モデルのイベントを使用する方法: モデルのdeletingイベントを使用して、親モデルが削除されるときに関連する子レコードを削除することもできます。以下はその一例です。

    class Post extends Model
    {
       protected static function boot()
       {
           parent::boot();
           static::deleting(function ($post) {
               $post->comments()->delete();
           });
       }
    // ...
    }

    上記の例では、deletingイベントが発生したときにコメントを削除するコードが実行されます。

これらの方法のいずれかを使用すると、Laravelで子関係のレコードを削除することができます。適切な方法を選択し、プロジェクトの要件に応じて使用してください。