0

我正在为 CodeIgniter 使用 Datamapper ORMget_rules我对模型中的字段有“序列化”和“非序列化”规则。该字段将存储序列化数据,当我检索回来时,get_rules将对其进行反序列化。

但是,在调用之后save(),我试图重新访问该字段,但它仍然返回序列化字符串,而不是数组。

有没有办法重新调用或刷新我的对象,以便get_rules再次调用并且该字段现在返回数组?

这是我的模型:

class User extends DataMapper{
  public $validation = array(
    'password' => array(
      'label' => 'Password',
      'rules' => array('encrypt')
    ),
    'preferences' => array(
      'rules' => array('serialize'),
      'get_rules'=> array('unserialize')
    )
  );

  function __construct($id = NULL)
  {
    parent::__construct($id);
  }

  function post_model_init($from_cache = FALSE)
  {
  }

  public function _encrypt($field)
  {
    if (!empty($this->{$field}))
    {
      $this->{$field} = md5($this->{$field});
    }
  }
}
4

2 回答 2

0

Datamapper ORM,afaik,只会get_rules在实际执行get(). 您可以尝试几件事:

鉴于以下

$a = new Fruit();
$a->name = 'grapes';
$a->colors = serialize(array("purple","green"));
$a->save();

1.创建一个新的datamapper对象并重新获取:

$b = new Fruit();
$b->where('id', $a->id)->get();
$colors = $b->colors;

2.unserialize()自己的领域...

$colors = unserialize($a->colors);

3. 你甚至可以使用get_clone()

//not tested...
$b = $a->get_clone();
$colors = $b->colors;
于 2012-09-17T06:47:35.147 回答
0

这已在此处修复:https ://bitbucket.org/wanwizard/datamapper/commits/db6ad5f2e10650b0c00c8ef9b7176d49a8e85163

从 bitbucket 获取最新的 Datamapper 库。

于 2013-01-21T17:46:31.203 回答