Laravel mutator被触发但批量赋值时未修改字段值是什么原因
问题排查方向
- 首先检查你的
someModel中是否直接定义了public $test公共属性:如果你手动给模型声明了和字段同名的公共属性,Eloquent会优先读取该公共属性的值写入数据库,不会使用$this->attributes数组里的修改后的值,直接删除这个公共属性声明即可。 - 排查模型的
boot方法中是否注册了saving/creating等事件钩子:如果事件逻辑中也对test字段赋值,会覆盖修改器的执行结果,调整赋值顺序或者删除冲突逻辑即可。 - 检查是否配置了字段类型转换冲突:如果模型的
$casts数组中对test字段做了额外类型转换,或者定义了$attributes默认值覆盖了修改结果,调整对应配置即可。 - 排查数据库层面是否存在触发器:如果表上有
INSERT前触发的触发器修改test字段值,也会导致修改器结果被覆盖,调整触发器逻辑即可。
快速验证方法
你可以在修改器执行后打印属性数组确认修改结果:
public function setTestAttribute($value) { $this->attributes['test'] = '1234'; // 临时加这行看修改后的值是否正确存入attributes数组 dd($this->attributes); }
如果打印的attributes中test值是1234,那么问题一定出在修改器执行之后的赋值逻辑/数据库层面,如果值不对才是修改器本身的问题。
内容的提问来源于stack exchange,提问作者simon
相关产品推荐
相关产品推荐

