我有一个postgres数据库,它的表中有一个名为“attributes”的列。
attributes列是jsonb类型的,所以我使用了Eloquent类型转换:
protected $casts = [
'attributes' => AsArrayObject::class,
];
这似乎会导致一个问题,因为“attributes”已经是Eloquent Model的属性,并且似乎没有任何别名列名的规定。
所以这行:
$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'hello word!';
似乎正在访问内部Eloquent Model属性属性,而不是数据库表中的“attributes”字段,导致以下错误:
SQLSTATE[42703]: Undefined column: 7 ERROR: column "a_property_of_the_attributes_jsonb_field" of relation "mytable" does not exist
LINE 1: update "mytable" set "a_property_of_the_attributes_jsonb_field" = $1 where "mypk" = ...
我不能重命名该列,因为其他非PHP项目正在使用DB。
我如何在模型中作为ArrayObject访问我的'attributes'字段?
1条答案
按热度按时间o4tp2gmn1#
简单的解决方法是使用ArrayObject访问器方法:
注意:仍然需要定义'attributes'类型转换,以便将底层jsonb字段作为数组访问: