Laravel使用Eloquent存储JSON时报错:parameterize()参数类型不符
问题原因
你定义的data()访问器/修改器没有关联到数据库的facture_json字段,导致Eloquent保存数据时直接传入数组,而非先转为JSON字符串,触发了参数类型错误。
解决方法
方法一:修正Attribute方法名(匹配字段)
Laravel的Attribute方法名需要与数据库字段对应(驼峰命名对应下划线字段),修改模型代码如下:
protected $fillable = [ 'facture_json' ]; protected function factureJson(): Attribute { return Attribute::make( get: fn ($value) => json_decode($value, true), set: fn ($value) => json_encode($value), ); }
之后控制器中获取数据时,需要对应改为dd($item->facture_json);。
方法二:使用内置字段类型转换(更简洁)
直接在模型中添加$casts属性,让Laravel自动处理JSON与数组的转换,无需手动编写访问器/修改器:
protected $fillable = [ 'facture_json' ]; protected $casts = [ 'facture_json' => 'array', // 也可写为'json' ];
此时控制器中保存和读取数据的逻辑无需修改,直接访问$item->facture_json即可得到数组格式的数据。
内容的提问来源于stack exchange,提问作者light
相关产品推荐
相关产品推荐

