我在laravel应用中几乎所有地方都使用交易。这是我在控制器中编写的示例代码。
DB::beginTransaction();
try{
Language::create(['name'=>"good"]);
Role::create(['name'=>'admin']);
DB::commit();
}
catch(\Exception $e){
DB::rollback();
return response()->json(['message'=>'error']);
}
不好的是,我不想一直写try catch语句,这很累并且使代码更大。我想全局捕获数据库事务错误。
所以我发现我可以这样写:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
问题-但是不好的是,如何在laravel中捕获全局异常handler.php中的错误?我知道这会引发Throwable或Exception异常,但是在我的handler.php中,我也捕获了其他类型的错误。现在throwable和Exception是几乎发生于任何事情的类型-找不到模型。因此,我需要在我的handler.php中采用某种方式来猜测,我得到的异常实际上是数据库事务异常的100%。如果问题不清楚,请随时发表评论,我会进一步解释。