【问题标题】:Perform action on Laravel model once it has been filled with data填充数据后对 Laravel 模型执行操作
【发布时间】:2017-06-29 18:20:41
【问题描述】:

所以我有一个具有 json 字段作为属性的模型。当它被检索到时,我想将该字段转换为一个数组,以便我可以用它做一些其他事情。

例如,如果 json 在名为 json 的参数中有类似 {name:bob,email:sue} 的数据,则在构建模型对象时,我希望它是这样的:

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

【问题讨论】:

    标签: php json laravel model laravel-5.4


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这并不完全是我所希望的,但这会奏效。当然比我做的要干净得多,也不那么老套。
    猜你喜欢
    • 2013-07-05
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2013-12-06
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多