Eloquent删除和MySQL外键级联

时间:2017-11-01 13:05:03

标签: mysql laravel eloquent relationship dingo-api

我在MySQL数据库中有这些表:

用户['id','name'],

角色['id','title']和

user_role ['user_id','role_id'],两者都是外键,CASCADE。

当它捕获异常时,用户会根据需要保留在表中,而关系表中的行将被删除。

try{
    $user->delete();
}
catch (\Exception $e){
    throw new \Dingo\Api\Exception\DeleteResourceFailedException('Error.');
}

这是雄辩的错误吗?

现在,我找到了解决这个问题的方法,但我不确定这是最好的做法。有没有更好的方法呢?

try{
    $roleId = $user->roles[0]->id;
    $user->delete();
}
catch (\Exception $e){
    $user->roles()->attach($roleId);
    throw new \Dingo\Api\Exception\DeleteResourceFailedException('Error.');
}

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,交易就是你需要的。

Database Transactions

DB::transaction(function () {
    $user->delete();
});

如果您遇到死锁,请使用此

 DB::transaction(function () {
    $user->delete();
},5);