Laravel 9数据更新失败求助:提交表单后数据未变更
Laravel 9 数据更新失败排查方案
先确认请求参数是否有效
把dd($request)移到数据库更新代码之前,执行后查看id、id_bb、nama_bb、stok这些字段是否有正确的值。如果某个字段为空或不符合预期,检查表单是否正确提交了对应字段:- 确保表单包含
id的隐藏输入项:<input type="hidden" name="id" value="{{ $data->id }}"> - 表单提交方法需为
PUT/PATCH,如果是POST表单,要添加@method('PUT')指令,否则无法触发update路由逻辑。
- 确保表单包含
检查路由配置
确认你的更新路由是否正确配置:- 若用资源路由:
Route::resource('bahanbaku', YourController::class),默认更新路由是PUT /bahanbaku/{bahanbaku},此时控制器方法应接收模型参数或从路由参数获取id,而非从request取id。 - 若用自定义路由:需明确指定请求方法为PUT/PATCH,比如
Route::put('/bahanbaku/update', [YourController::class, 'update'])。
- 若用资源路由:
验证数据库查询是否命中记录
执行更新后,打印受影响行数确认是否有记录被修改:$affected = DB::table('bahanbaku')->where('id', $request->id)->update([ 'id_bb' => $request->id_bb, 'nama_bb' => $request->nama_bb, 'stok' => $request->stok ]); dd($affected); // 输出0表示where条件未匹配到任何记录如果输出0,检查
$request->id的值是否对应数据库中存在的记录,或者id字段是否为表的主键。排查数据库约束与字段问题
- 检查表字段名是否与代码中一致,比如
id_bb、nama_bb是否拼写正确,注意大小写和下划线。 - 若
id_bb是唯一索引,确认新值是否与现有记录冲突,冲突会导致更新失败且无报错(除非捕获异常)。可以添加异常捕获查看具体错误:try { DB::table('bahanbaku')->where('id', $request->id)->update([ 'id_bb' => $request->id_bb, 'nama_bb' => $request->nama_bb, 'stok' => $request->stok ]); } catch (\Exception $e) { dd($e->getMessage()); }
- 检查表字段名是否与代码中一致,比如
确认CSRF验证通过
表单中必须包含@csrf指令,否则Laravel会返回419状态码拒绝请求,导致更新代码未执行。查看浏览器开发者工具的网络请求,确认请求状态码为200。
内容的提问来源于stack exchange,提问作者Array
相关产品推荐
相关产品推荐

