如何删除关系模型数据以及多个关系中的数据透视表数据?

时间:2017-02-12 06:51:44

标签: laravel laravel-5.3

用户与报告有很多关系。删除用户后,我想从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();
}

如果有更好的方法可以删除相关的模型数据,我想知道。

2 个答案:

答案 0 :(得分:1)

您可能希望设置users表以引用报表中的外键。这样,您可以在删除用户时利用->onDelete('cascade')方法。 See the documentation here

答案 1 :(得分:0)

您可以使用 detach()方法删除相关模型,例如:

$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]);
        }
 }

有关detach()方法的更多信息:

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