Laravel 8 提交textarea表单后数据库无更新 该如何排查解决?
问题根源
你提交的表单中没有携带需要更新的infos表记录ID,控制器的更新逻辑中where('id', $request->id)匹配不到对应记录,因此不会执行任何数据库修改操作。
修复步骤
- 第一步:在表单中添加隐藏ID字段
打开infoupdate.blade.view文件,在<form>标签内部添加隐藏输入框,传递当前编辑的记录ID:
<form action="{{ route('updateinfo') }}" method="POST"> @method('PUT') @csrf <!-- 新增隐藏ID字段 --> <input type="hidden" name="id" value="{{ $infos->id }}"> <!-- 其余原有表单代码保持不变 --> </form>
- 第二步(可选优化,更符合Laravel开发规范):调整路由参数传递逻辑
你也可以将ID放在路由路径中,避免通过表单隐藏字段传递,降低传参错误概率:
- 修改
web.php中的更新路由,增加ID参数:
Route::put('/updateinfo/{id}',[DBIController::class, 'update'])->middleware('admin')->name('updateinfo');
- 修改表单的action属性,传递ID参数:
<form action="{{ route('updateinfo', $infos->id) }}" method="POST">
- 修改控制器
update方法,直接接收路由中的ID参数:
public function update(Request $request, $id){ $request->validate([ 'contentInfo' => 'required|min:16' ]); DB::table('infos')->where('id', $id)->update([ 'contentInfo' => $request->contentInfo ]); return redirect()->route('DBI')->with('message','Data Pengumuman Berhasil di Update'); }
其他可排查场景
如果修改后仍然不生效,可以按以下顺序排查:
- 在控制器
update方法开头添加dd($request->all()),提交表单后查看是否正常返回id和contentInfo参数,确认参数传递无误 - 检查
contentInfo提交的内容是否和数据库原有内容完全一致,Laravel的更新操作会自动跳过无变更的记录,此时不会报错也不会修改数据库 - 确认当前登录的账号满足
admin中间件的权限要求,不会被中间件拦截请求
内容的提问来源于stack exchange,提问作者Aradenta Fareast
相关产品推荐
相关产品推荐

