一旦填充了数据,就对Laravel模型执行操作

时间:2017-06-29 18:20:42

标签: php json laravel model laravel-5.4

所以我有一个以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

1 个答案:

答案 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']访问它们。