2017-02-12 99 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

相关问题