laravel中如何优雅使用事务,以及记录错误日志?
需求
在控制器中使用事务处理,当发生SQL执行异常时需要回滚,同时在Exceptions\Handler.php中统一拦截异常并写入日志
控制器代码
/**
* 批量设置回访
* @param CustomerBatchRequest $request
* @return JsonResponse
*/
public function followup(CustomerBatchRequest $request): JsonResponse
{
$ids = $request->input('ids', []);
$isall = $request->input('isall', false);
DB::beginTransaction();
try {
// 勾选部分顾客更新
if (!empty($ids) && !$isall) {
$request->setFollowupByIds();
}
// 全选设置回访
if (empty($ids) && $isall) {
$request->setFollowupByAll();
}
DB::commit();
return response_success();
} catch (Exception $e) {
DB::rollBack();
// 抛出 throw $e;
return response_error($e->getMessage());
}
}
异常拦截 App\Exceptions\Handler.php
拦截`throw $e`异常,写入日志
目前的处理方式感觉不够优雅,请问大家在项目中是如何处理类似需求的?希望能够分享一些经验和最佳实践,谢谢!
给异常加个名字,例如
throw new RollBackException
,然后在 Handle 处理啊Laravel 有一个
\Illuminate\Database\Events\TransactionRolledBack
事件,可以 listen 这个事件去写日志