Laravel Eloquent模型动态存储属性来自单个序列化字段

时间:2016-04-26 21:48:39

标签: laravel serialization eloquent

使用Eloquent L5.1

我不想为模型定义一组属性。而是将所有内容都存储在数据库中作为序列化列。

换句话说,设置为此模型的任何属性应该在保存之前从对象中删除并添加到要序列化的数组中,然后在db中保存到数据"列。

从db中检索对象后,模型应该使用数据列中反序列化的参数进行水合。

我可以覆盖大量的Illuminate \ Database \ Eloquent \ Model方法来实现这一目标,而且我愿意这样做,如果有人有这样的例子,我很好奇。

这方面的一个示例可能是配置对象具有几乎无限的未知值,这些值具有针对不同对象或不同用户的多个itterations。

1 个答案:

答案 0 :(得分:2)

将这些访问者和变更者放在模型中:

class YourModel extends Model
{
    public function getDataAttribute($data)
    {
        return collect(json_decode($data,true));
    }

    public function setDataAttribute($data)
    {
        $data = (is_array($data) || is_object($data)) ? json_encode($data) : $data;
        return $this->attributes['data'] = $data;
    }   
}

现在可以将数据作为json字符串,数组或对象传递

YourModel::create(['data'=>'{"working":"ok"}']);
YourModel::create(['data'=>['working'=>'ok']]);

它将适用于所有三种情况。