You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel8升级后coa/find路由报SQLSTATE[22P02整数类型输入语法错误

问题解决方案

根本原因

你的错误本质是路由匹配顺序问题,和控制器逻辑完全无关:

  • 你的路由文件中,coa/find 路由的前面存在 coa/{id} 格式的路由(大概率是 CoaController 的资源路由),Laravel 路由是从上到下匹配的,请求 coa/find 时会先命中 coa/{id} 路由,把字符串 find 当做 id 参数传入 show 方法,因此才会执行查 id = find 的 SQL,请求根本没有走到你写的 findCoa 方法里。
  • Laravel 8 默认取消了路由服务提供者的全局命名空间前缀,你用的字符串格式 'Setting\CoaController@findCoa' 写法本身也存在兼容性问题,你没报控制器不存在的错误,反而报 SQL 错误,也实锤了请求被前面的路由拦截的判断。

解决方案

  1. 调整路由顺序:把固定路径的路由放到带参数的路由、资源路由前面,示例如下:
// 固定路径路由放最前面
Route::get('/coa/find', [\App\Http\Controllers\Setting\CoaController::class, 'findCoa']);
// 再放资源路由/带参数的路由
Route::resource('coa', \App\Http\Controllers\Setting\CoaController::class);
  1. 统一路由写法:Laravel 8 推荐用数组形式定义路由,你 Laravel 7 原有的数组写法完全兼容,不需要改成字符串 @ 格式的写法,避免命名空间不匹配的问题。
  2. 验证:修改完成后执行 php artisan route:list 查看路由列表,确认 coa/find 路由对应的控制器方法为 findCoa,且排序在 coa/{id} 路由之前即可。

内容的提问来源于stack exchange,提问作者bandungeuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 23:03:03