cakephp アソシエーションしたModelのビヘイビア内のafterFindは実行されない

タイトルのまんまですが結構はまったのでメモ。

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]

こんな感じ。

コメントを残す

メールアドレスが公開されることはありません。