2017-11-01 25 views
0

私は、MySQLデータベース内のこれらのテーブルがあります。雄弁外部キーのカスケードを削除し、MySQLの

ユーザーの[ 'ID'、 '名前']、

役割[ 'ID'、 'タイトル']と

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.'); 
} 

答えて

0

私があなたの質問を理解していれば、取引は必要なものです。

Database Transactions

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

、ケースであなたはデッドロックの使用トリックをしたこの1

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

はいに直面しています。私はまだtry catch、troughでラップしなければならなかった。どうもありがとう! – Gantman94