Laravel框架提交表单后编辑数据未更新到数据库无报错问题求助
解决方案
以下是按排查优先级排序的可行方案:
- 优先检查
MediaOrder模型的批量赋值配置
Laravel默认会过滤不在$fillable白名单内的字段,且不会抛出报错。请打开app/Models/MediaOrder.php文件,确认所有你要更新的字段都已经添加到$fillable属性中,示例如下:
临时测试也可以将模型的protected $fillable = [ 'nomor', 'nomor_reference', 'periode_start', 'periode_end', 'category_id', 'type_id', 'agency_code', 'agency_name', 'advertiser_code', 'advertiser_name', 'brand_code', 'brand_name', 'nett_budget', 'gross_value', 'nett_cashback', 'nett_bundling', 'version_code', 'spot', 'accountexecutive_name', 'group_id', 'userto_name', 'notes', 'attachment_name' ];$guarded设为空数组,关闭批量赋值限制:protected $guarded = []; - 打印
updateOrCreate执行状态排查问题
调整代码打印操作的实际执行结果,确认是否匹配到记录、是否有字段变更:$mediaOrder = MediaOrder::updateOrCreate(['id' => $request->id], [ // 保留你原来的所有字段配置 ]); dd([ '传入的目标id' => $request->id, '记录是否存在' => $mediaOrder->exists, '是否产生变更' => $mediaOrder->wasChanged(), '变更的字段' => $mediaOrder->getChanges() ]); - 查看实际执行的SQL语句
开启查询日志,确认生成的SQL和参数是否符合预期:\DB::enableQueryLog(); MediaOrder::updateOrCreate(['id' => $request->id], [ // 保留原来的字段配置 ]); dd(\DB::getQueryLog()); - 其他可能的排查方向
- 检查是否开启了数据库事务但未提交,导致操作被自动回滚
- 检查
MediaOrder模型是否定义了saving/updating观察者或事件,返回false会终止保存操作且无报错 - 确认当前代码连接的数据库和你手动查询的数据库是同一个,避免配置错误导致数据同步异常
- 如果匹配到的原有记录字段和你提交的字段完全一致,Laravel不会执行更新操作,属于正常逻辑
内容的提问来源于stack exchange,提问作者Vtych
相关产品推荐
相关产品推荐

