Laravel 9数据编辑无报错但未写入数据库问题求助
Laravel 9 编辑数据不写入数据库问题排查与修复
核心问题与修复方案
1. 路由模型绑定参数不匹配
你的资源路由中,更新路由的参数是{data}(从route:list可见pasien/data/{data}),但控制器update方法的参数是IbuHamil $pasien。Laravel路由模型绑定要求参数变量名与路由参数名完全一致,否则会创建一个空的IbuHamil实例,调用update时不会对数据库产生任何影响。
修复代码:
将update方法的参数改为IbuHamil $data,同步修改后续代码中的变量名:
public function update(Request $request, IbuHamil $data) { $request->validate([ 'name' => 'required|string', 'nama_suami' => 'string|nullable', 'alamat' => 'string|nullable', ]); $data->update([ 'name' => $request->name, 'nama_suami' => $request->nama_suami, 'alamat' => $request->alamat, ]); return redirect()->route('pasien.dashboard'); }
2. Edit方法查询逻辑错误
当前edit方法中的查询逻辑存在逻辑错误:
$pasien = IbuHamil::where('id', $pasien_id)->findOrFail($id);
这段代码的逻辑是:先筛选id = 当前登录用户ID的记录,再从中找id = 传入的$id的记录,这几乎永远找不到正确的目标记录(除非$pasien_id和$id完全相等)。正确逻辑应该是查询属于当前登录用户的、ID为$id的IbuHamil记录。
修复代码:
public function edit($id) { $pasien_id = Auth::guard('pasien')->id(); // 正确筛选属于当前用户的目标记录 $pasien = IbuHamil::where('id', $id)->where('pasien_id', $pasien_id)->firstOrFail(); return view('pasien.data.edit', compact('pasien_id', 'pasien')); }
如果Pasien模型和IbuHamil模型已建立关联(比如Pasien模型中有hasOne(IbuHamil::class)方法),可简化为:
public function edit($id) { $pasien = Auth::guard('pasien')->user()->ibuHamil()->findOrFail($id); return view('pasien.data.edit', compact('pasien')); }
3. 表单提交按钮拼写错误
视图中的提交按钮type属性拼写错误:type="sumbit",正确拼写为type="submit"。虽然部分浏览器会容错,但这可能导致表单无法正确触发提交,需修正:
<button class="btn btn-primary" type="submit">Simpan</button>
额外建议
- 在
update方法中添加日志输出,验证是否正确获取到模型实例:\Log::info('Updating pasien data:', ['model_id' => $data->id]); - 开启Laravel调试模式(
.env中APP_DEBUG=true),可在出现错误时查看详细异常信息,便于排查问题。
内容的提问来源于stack exchange,提问作者Sabri
相关产品推荐
相关产品推荐

