(De)在创建模型时自动序列化包含JSON的字段

时间:2013-04-16 05:57:04

标签: json activerecord serialization yii

我该怎么做呢?我想从我的数据库中获取模型时序列化和反序列化JSON字符串,这样我就可以直接访问stdObject,而不必每次都自己反序列化。

2 个答案:

答案 0 :(得分:3)

我相信您可以将其添加到您的模型中,并更改爆炸/内爆以适合您的序列化/反序列化问题:

<强>内爆/爆炸:

protected function afterFind() {

    parent::afterFind();

    if($this->hasAttribute('types'))
        $this->types = explode('|', $this->types);

    return $this;
}

protected function beforeSave() {

    parent::beforeSave();

    if($this->hasAttribute('types'))
        $this->types = implode('|', $this->types);

    return $this;
}

if语句只是一个故障保护,以防数据库中的字段丢失(不太可能),或者如果您在基本模型中使用此代码(因为某些模型可能没有此字段)。在大多数情况下,排除此检查是安全的。

<强> JSON:

protected function afterFind() {

    $this->types = json_decode($this->types);
    return parent::afterFind();
}

protected function beforeSave() {

    $this->types = json_encode($this->types);
    return parent::beforeSave();
}

答案 1 :(得分:3)

您也可以使用getter / setter。假设我们的数据库列名为jsonData。然后你可以写

public function getData()
{
    return json_decode($this->jsonData);
}

public function setData($value)
{
    $this->jsonData = json_encode($value);
}
然后可以像常规属性一样使用

data