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

Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0

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

Model内に直接書くとちゃんとコールバックが実行されるので

beforeSaveとafterFindを両方書いた

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;
    }
}

こんな感じ。

Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0

あわせて読みたい

Fatal error: Uncaught Exception: 12: REST API is deprecated for versions v2.1 and higher (12) thrown in /var/www/junkpot.net/tech/html/wp-content/plugins/seo-facebook-comments/facebook/base_facebook.php on line 1273