所以我有一个以json字段作为属性的模型。当它被检索时,我想将该字段转换为数组,以便我可以用它做其他一些事情。
例如,如果json在名为{name:bob,email:sue}
的参数中包含类似json
的数据,那么在构建模型对象时,我希望它是这样的:
public function setJsonAttribute($value)
{
$this->attributes['json'] = $value;
$jsonInfo = json_decode($value, true);
$this->name = $jsonInfo['email'];
$this->email = $jsonInfo['name'];
}
这是我尝试使用mutator的一个例子,但它不是最佳的。一旦模型加载了数据库中的数据,有没有办法自动完成这类工作?
Laravel 5.4
答案 0 :(得分:0)
Eloquent包含一个名为数组转换的功能,它在检索时将字段从JSON转换为数组属性,并在保存时将数组转换回JSON字符串。
您可以通过向模型中添加$ casts属性来启用此功能,其中字段名称为键,数组为值:
protected $casts = [
'options' => 'array',
];
https://laravel.com/docs/5.4/eloquent-mutators#array-and-json-casting
如果您在数据库中options
为{name:bob,email:sue}
,则可以$model->options['name']
和$model->options['email']
访问它们。