【问题标题】:Laravel Eloquent Model Dynamic Stored Properties from and to a single serialized fieldLaravel Eloquent 模型动态存储属性来自单个序列化字段
【发布时间】:2016-08-20 22:59:31
【问题描述】:

使用 Eloquent L5.1

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

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

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

我可以重写大量的 Illuminate\Database\Eloquent\Model 方法来实现这一点,我愿意这样做,很好奇是否有人有这样的例子。


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

【问题讨论】:

  • 你想把所有的数据都以json的形式存储在data列中,当你取回数据的时候要解码,这是你想要的吗?

标签: laravel serialization eloquent


【解决方案1】:

将这些访问器和修改器放入您的模型中:

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']]);

它适用于所有三种情况。

【讨论】:

  • 非常好 我希望能够: $yourModel->key = "value" $yourModel->save(); $yourModel->toArray(); // '键' => '值'
  • @ajameswolf 如果解决了您的问题,请将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 2016-09-05
  • 2014-06-17
  • 1970-01-01
  • 2014-06-28
  • 2015-07-24
  • 2015-01-26
  • 2019-03-04
  • 2014-08-13
相关资源
最近更新 更多