2017-02-12 6 views
0

ユーザーはReportと多かれ少なかれ関連しています。ユーザーを削除すると、report_userピボットテーブルからレポートとデータをすべて削除します。リレーションモデルデータとピボットテーブルデータを、多対多の関係で削除するにはどうすればよいですか?

foreach($user->reports as $report) 
{ 
    $report->delete(); 
} 

を、関連するモデルデータを削除するには、任意のより良い方法があれば、私は知っているしたいと思います:

public function delete(Request $request) 
{ 
     $user=User::where('id',$request->id); 
     if($user) 
     { 
      $user->delete(); 
      return response()->json(['status'=>true]); 
     } 
} 

手動で私は、ユーザーが使用してレポートを削除することができます:ここに は私delete()方法です。

+0

データベースエンジンによっては、CASCADEアクション(ON DELETE CASCADE)でピボットテーブルの外部キー制約を使用することもできますが、これはMysqlおよびMyIsamでは機能しません。 –

答えて

1

おそらくレポートで外部キーを参照するようにusersテーブルを設定する必要があります。そうすれば、ユーザーが削除されたときに->onDelete('cascade')メソッドを利用することができます。 See the documentation here

0

あなたが好きな、関連するモデルを削除するには、デタッチ()メソッドを使用することができます。だからあなたの完全なコードは次のようになります

$user->reports()->detach(); 

:切り離し(詳細は

public function delete(Request $request) 
{ 
     $user=User::where('id', $request->id); 
     if($user) 
     { 
      $user->delete(); 
      $user->reports()->detach(); 
      return response()->json(['status'=>true]); 
     } 
} 

)方法:

https://laravel.com/docs/master/eloquent-relationships

関連する問題