Laravel中点击城市触发Ajax GET请求出现500错误原因排查
分析500内部服务器错误的原因
咱们一步步拆解你遇到的问题,核心是两个关键错误导致了这个服务器内部错误:
1. 路由参数的获取方式不对
你的路由明确定义了{slug}参数,但控制器方法里却试图通过$request->slug来获取它——这是错误的用法。路由中的参数需要直接作为方法参数接收,或者用$request->route('slug')来读取,否则$request->slug会返回null,直接导致数据库查询逻辑出错。
2. whereCity动态查询方法的用法完全错误
Laravel的动态where方法(比如whereCity)的设计逻辑是:直接传入字段对应的值,它会自动匹配对应的字段名。你现在的写法:
Conference::whereCity('city', DB::raw($request->slug))->get();
完全不符合规范:whereCity()只需要接收一个参数(即要匹配的城市值),而且这里根本不需要用DB::raw()——你只是做普通的字符串匹配,不是要执行原生SQL表达式。
修正后的控制器代码
把getConferencesOfCity方法改成下面这样就能解决问题:
public function getConferencesOfCity(Request $request, $slug) { // 直接使用路由参数$slug,或者用$request->route('slug')读取 $conferences = Conference::whereCity($slug)->get(); // 或者用更通用的where写法,效果完全一致: // $conferences = Conference::where('city', $slug)->get(); return response()->json($conferences); }
另外建议你开启Laravel的调试模式(在.env文件中设置APP_DEBUG=true),这样能看到具体的错误详情(比如SQL语法错误),会大大加快排查问题的速度。
内容的提问来源于stack exchange,提问作者johnW
相关产品推荐
相关产品推荐

