Laravel中保存模型后enum类型paidBy字段未更新如何解决?
Laravel enum字段更新不生效解决方案
以下是按优先级排列的排查及解决步骤:
- 关闭模型自动蛇形属性转换
Laravel模型默认开启驼峰属性到蛇形数据库字段的自动转换,你迁移中定义的字段名为驼峰paidBy,赋值时会被自动映射到不存在的paid_by字段,导致更新失败。
在对应模型中添加配置关闭该转换即可:
public static $snakeAttributes = false;
- 校验枚举值完全匹配
确认你赋值的字符串和迁移中定义的枚举值完全一致,包括大小写、空格字符,有任何差异都会触发数据库字段约束导致写入失败。 - 排查字段拦截逻辑
检查模型中是否定义了setPaidByAttribute修改器、全局查询作用域等逻辑,这类逻辑可能会拦截字段赋值或写入操作。 - 验证更新逻辑
如果以上配置都正确,可以使用批量更新写法测试,同时开启SQL日志确认实际执行的语句:
// 批量更新写法 $ad->update(['paidBy' => 'CARD']); // 查看执行的SQL确认是否包含paidBy字段更新 \DB::enableQueryLog(); $ad->paidBy = 'CARD'; $ad->save(); dd(\DB::getQueryLog());
内容的提问来源于stack exchange,提问作者Abdo Rabah
相关产品推荐
相关产品推荐

