0

CodeIgniter に Datamapper ORM を使用してい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});
    }
  }
}
4

2 に答える 2

0

これはここで修正されました:https ://bitbucket.org/wanwizard/datamapper/commits/db6ad5f2e10650b0c00c8ef9b7176d49a8e85163

bitbucketから最新のDatamapperライブラリを入手します。

于 2013-01-21T17:46:31.203 に答える
0

Datamapper ORM は、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 に答える