如何全局捕获数据库事务错误

时间:2018-12-20 23:03:46

标签: php laravel error-handling

我在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%。如果问题不清楚,请随时发表评论,我会进一步解释。

0 个答案:

没有答案