1

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

4

2 回答 2

4

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

内爆/爆炸:

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();
}
于 2013-04-16T06:00:56.803 回答
3

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

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

public function setData($value)
{
    $this->jsonData = json_encode($value);
}

data然后可以像常规属性一样使用。

于 2013-04-16T16:44:19.120 回答