Laravel 中处理合同查询空值的 Try Catch 逻辑错误问题
代码存在的核心问题
- 分支判断完全倒置:当前逻辑中
empty($contratos)匹配的是“未查询到合同”的场景,却触发了200状态码返回空数组的分支;反而非空(成功查到合同)的场景会走进“合同未找到”的406分支,和需求逻辑完全相反。 - 异常块变量引用错误:catch 语句捕获的异常对象赋值给了
$e,但内部判断逻辑引用了未定义的$exception变量,运行到异常分支时会直接触发PHP未定义变量警告,根本无法执行自定义的错误返回。 - try-catch适用场景错位:“未查询到合同”是可直接判断的常规业务分支,不需要依赖异常捕获实现,当前把业务判断硬塞进try块的逻辑本身没有问题,但之前的分支写反才是核心原因。
可直接运行的修正版本
try { // 此处保留原有查询$contratos的业务逻辑 if (empty($contratos)) { // 空结果时返回要求的错误提示与406状态码 return response()->json([ "message" => "合同未找到", "code" => "CONTRACT_NOT_FOUND" ], 406); } // 查到结果时正常返回200状态码与合同数据 return response()->json($contratos, 200); } catch (\Exception $e) { // 修正异常变量引用错误,仅处理运行时抛出的406类异常 if ($e->getCode() == 406) { return response()->json([ "message" => "合同未找到", "code" => "CONTRACT_NOT_FOUND" ], 406); } // 其他未覆盖的异常统一返回500状态码 return response()->json([ "message" => "服务器内部处理错误", "code" => "SERVER_ERROR" ], 500); }
内容的提问来源于stack exchange,提问作者testCode
相关产品推荐
相关产品推荐

