在save()之后未调用codeigniter datamapper get_规则

在save()之后未调用codeigniter datamapper get_规则,codeigniter,codeigniter-datamapper,Codeigniter,Codeigniter Datamapper,我正在为模型中的一个字段使用“序列化”和“非序列化”规则。此字段将存储序列化数据,当我检索回来时,get\u rules将取消序列化 但是,在调用save()之后,我试图重新访问该字段,但它仍然返回序列化字符串,而不是数组 是否有任何方法可以重新调用或刷新我的对象,以便再次调用get\u rules,该字段现在返回数组 这是我的模型: class User extends DataMapper{ public $validation = array( 'password' =>

我正在为模型中的一个字段使用“序列化”和“非序列化”规则。此字段将存储序列化数据,当我检索回来时,
get\u rules
将取消序列化

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

是否有任何方法可以重新调用或刷新我的对象,以便再次调用
get\u 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});
    }
  }
}

Datamapper ORM afaik仅在实际执行
get()
时使用
get\u规则。您可以尝试以下几点:

鉴于以下情况

$a = new Fruit();
$a->name = 'grapes';
$a->colors = serialize(array("purple","green"));
$a->save();
1.创建新的datamapper对象并重新获取: 2. <代码>取消序列化()
字段本身。。。 3.您甚至可以使用
get\u clone()

这已在此处修复:


从bitbucket获取最新的Datamapper库。

嗨,Jordan,谢谢你的回答。然而,我的观点是简化控制器,所以我想把所有后处理放在模型中,而不是控制器中。目前,我使用你的建议#1,但我认为它的性能会更低。不知何故,我仍然认为save()之后的get_规则将是理想的方式。你是对的,1是一种性能上的冲击#2从绩效角度来看是最好的;内部DM代码无论如何都必须运行
unserialize()
。你的另一个选择是。在任何情况下,如果您有功能请求,Wanwizard在中都非常活跃。谢谢!我只是在论坛上写了一篇帖子。将等待向导回答:)
$b = new Fruit();
$b->where('id', $a->id)->get();
$colors = $b->colors;
$colors = unserialize($a->colors);
//not tested...
$b = $a->get_clone();
$colors = $b->colors;