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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:04