在save()之后没有调用codeigniter datamapper get_rules

时间:2012-09-17 05:52:06

标签: codeigniter codeigniter-datamapper

我正在使用Datamapper ORM for CodeIgniter我为模型中的字段设置了“序列化”规则和get_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});
    }
  }
}

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

从bitbucket获取最新的Datamapper库。