2017-02-12 98 views
0

用戶與報表有許多關係。刪除用戶後,我想從report_user數據透視表中刪除他們所有的報告和數據。 這裏是我的delete()方法:如何在多對多關係中刪除關係模型數據以及數據透視表數據?

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

手動我可以刪除用戶報告使用:

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

如果有什麼更好的方法來刪除相關的模型數據,我想知道。

+0

根據數據庫引擎的不同,您也可以在數據透視表中使用CASCADE操作(ON DELETE CASCADE)中的外鍵約束。但這不適用於Mysql和MyIsam。 –

回答

1

您可能想要設置用戶表來引用報告中的外鍵。這樣,當用戶被刪除時,您可以利用->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

相關問題