開啟了DB事務操作,然后在try里調用了方法,調用的方法報錯了,拋出 RuntimeException
異常
$result = false;
DB::beginTransaction();
try {
$validate = new \app\validate\BookApplyValidate();
if (!$validate->scene('pass')->check($params)) {
throw new ParamsException((string) $validate->getError());
}
$FriendService = new FriendService();
$applyInfo = $FriendService->findApply(['id' => $params['apply_id']]);//就這個報錯了,拋出 RuntimeException 異常
} catch (ParamsException $e){
DB::rollBack();
return Response::buildFailed($e->getCode(),$e->getMessage());
} catch (OperateException $e){
DB::rollBack();
return Response::buildFailed($e->getCode(),$e->getMessage());
} catch (QueryException $e) {
DB::rollBack();
return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
} catch (\Exception $e) {
DB::rollBack();//上面沒有捕獲的話,應該會被這個異?;惒东@呀
return Response::buildFailed(ReturnCode::EXCEPTION, '網(wǎng)絡異常,請檢查網(wǎng)絡');
}
if ($result){
DB::commit();
return Response::buildSuccess([], '操作成功');
}else{
DB::rollBack();
return Response::buildFailed(ReturnCode::INVALID, '操作失敗,請稍后再試');
}
RuntimeException: Uncommitted transactions found in P:\wwwroot\self_wwwroot\webman\project\backend\vendor\webman\log\src\Middleware.php:120
Stack trace:
#0 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(309): Webman\Log\Middleware->process()
#1 P:\wwwroot\self_wwwroot\webman\project\backend\app\middleware\Cors.php(20): Webman\App::Webman\{closure}()
#2 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(309): App\middleware\Cors->process()
#3 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(531): Webman\App::Webman\{closure}()
#4 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(128): Webman\App::findRoute()
#5 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Connection\TcpConnection.php(638): Webman\App->onMessage()
#6 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Events\Select.php(311): Workerman\Connection\TcpConnection->baseRead()
#7 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(2467): Workerman\Events\Select->loop()
#8 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(1453): Workerman\Worker->run()
#9 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(1396): Workerman\Worker::forkWorkersForWindows()
#10 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(560): Workerman\Worker::forkWorkers()
#11 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\support\App.php(124): Workerman\Worker::runAll()
#12 P:\wwwroot\self_wwwroot\webman\project\backend\start.php(4): support\App::run()
#13 {main}
這樣試試?
try {
//code
} catch (ParamsException $e){
DB::rollBack();
return Response::buildFailed($e->getCode(),$e->getMessage());
} catch (OperateException $e){
DB::rollBack();
return Response::buildFailed($e->getCode(),$e->getMessage());
} catch (QueryException $e) {
DB::rollBack();
return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
} catch (\RuntimeException $e) {
DB::rollBack();
return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
} catch (\PDOException | \Exception | \Error $e) {
DB::rollBack();
return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
} catch (\Throwable $e) {
DB::rollBack();
return Response::buildFailed(ReturnCode::EXCEPTION, '網(wǎng)絡異常,請檢查網(wǎng)絡');
}
你的索引異常未必能捕獲到,增加相應的 PDOException,RuntimeException先,因為是自己的搞的,然后 \Exception | \Error 這個兜底錯誤和其它基本異常,Throwable 這個做最終兜底
http://www.wtbis.cn/doc/webman/exception.html
這里有個統(tǒng)一的異常處理捕獲,可以做最終兜底,你可以看一看配一配