Laravel API 中 Eloquent Where 语句配合 Vue 开发无返回数据问题求助
问题根因
你出现这个问题的核心原因是前端请求传参格式不匹配后端取值逻辑:
你当前axios.post直接把cnr(数字类型的ID值)作为请求体发送,后端尝试从请求的键值对中取id字段自然无法拿到,$id实际为null,所以where语句没有匹配到任何数据。你手动写死ID时绕过了传参取值环节,所以可以正常返回。
修复方案
方案1(推荐,符合接口开发规范)
修改前端Vuex里的请求代码,把参数包装为带id键的对象:
fetchClientMeasurements({commit}, cnr) { // 把参数包裹成键值对结构 axios.post("http://localhost:8000/api/clientnr", {id: cnr}) .then(response => { console.log(response.data.data); console.log(cnr); commit("setMeasurements", response.data.data); }); },
修改后后端$request->id就能正常取到前端传递的ID值。
方案2(兼容现有前端传参,不推荐)
如果不想修改前端代码,也可以直接在后端读取请求体的原始内容作为ID:
public function specific_client(Request $request) { // 直接读取原始请求体内容作为ID $id = $request->getContent(); return JsonResource::collection( Measurement::where('client_id', '=',$id) ->with(['clients', 'measurement_data'])->get()); }
通用排查技巧
如果遇到类似参数取值异常的问题,可以在后端接口逻辑最前面加一行dd($request->all())打印所有请求参数,就能快速确认后端拿到的参数是否符合预期。
内容的提问来源于stack exchange,提问作者bgeertsema2000
相关产品推荐
相关产品推荐

