タイトルのまんまですが結構はまったのでメモ。
Model内に直接書くとちゃんとコールバックが実行されるので
beforeSaveとafterFindを両方書いた
[cc lang=’php’ ]
class ExsampleModel extends AppModel {
/**
* モデル名
* @access public
*/
public $name = ‘ExsampleModel’;
/**
* シリアライズされたカラム名
* @access public
*/
public $serializedFields = array (
‘fieldName’,
);
/**
* 保存用にデータをシリアライズする
*
*/
public function beforeSave() {
foreach ($this->serializedFields as $field) {
if (isset ($this->data[$this->name][$field])) {
$this->data[$this->name][$field] = serialize ($this->data[$this->name][$field]);
}
}
return TRUE;
}
/**
* シリアライズされたカラムを戻す
*
*/
public function afterFind($results) {
foreach ($results as $key => $val) {
foreach ($this->serializedFields as $field) {
if (isset ($results[$key][$this->name][$field]) && is_array ($results[$key][$this->name])) {
$results[$key][$this->name][$field] = unserialize ($results[$key][$this->name][$field]);
}
}
}
return $results;
}
}
[/cc]
こんな感じ。