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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:30:00