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

Laravel isDirty返回false但字段值已变更的问题求助

Laravel 11中firstname无法更新的排查与解决

针对你遇到的修改firstname无法保存、isDirty('firstname')返回false且getOriginal('firstname')显示null的问题,可从以下几个方向排查:

1. 模型属性与数据库字段名不匹配

Laravel默认开启蛇形命名转换($snakeAttributes = true),如果数据库字段是first_name,但模型里用的是firstname,就会导致属性映射错误:

  • 检查数据库表字段名,确认是firstname还是first_name;
  • 若字段名是first_name,模型属性需改为firstName(驼峰),或者在模型中添加:
    public $snakeAttributes = false;
    
    关闭自动蛇形转换,确保属性名和字段名完全一致。

2. $fillable拼写错误

仔细检查$fillable中的字段是否存在拼写错误,比如把firstname写成fristname或first_name,导致字段无法被批量赋值:

protected $fillable = ['firstname', 'lastname']; // 确认拼写完全正确

3. 查询时未加载firstname字段

如果查询模型时使用了select()指定字段且未包含firstname,模型加载时该属性会为null,此时修改值时会因“原null值与新值对比无变化”导致isDirty返回false:

// 错误示例:未包含firstname
$user = User::select('id', 'lastname')->find($id);
// 正确做法:移除select或包含firstname
$user = User::find($id);

4. 表单提交字段名错误

检查前端表单中firstname对应的name属性是否正确,比如是否写成了first_name而非firstname,导致请求中没有正确传递firstname参数:

<!-- 确认name属性与模型属性一致 -->
<input type="text" name="firstname" value="{{ $user->firstname }}">

5. 观察者/全局作用域干扰

暂时移除你当前的saving事件回调,测试是否能正常保存firstname,排除事件逻辑中意外重置字段值的可能;同时检查是否有其他全局作用域或观察者对firstname字段做了限制。

6. 缓存问题

执行以下命令清空Laravel缓存,避免因缓存的模型属性或配置导致异常:

php artisan cache:clear
php artisan config:clear
php artisan view:clear

临时排查技巧

在保存前添加以下代码,打印关键信息辅助定位:

// 打印请求参数
Log::info('Request data:', request()->all());
// 打印模型当前属性与原始属性
Log::info('Model attributes:', $model->getAttributes());
Log::info('Model original attributes:', $model->getOriginal());

内容的提问来源于stack exchange,提问作者cerien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:26:00