2014年2月14日金曜日

cakephpのカスタムValidationでレコードの存在チェック

cakephp2.xにてカスタムValidationを使ってレコードの存在チェックを行う。
管理画面で各種IDを直接入力するような場合のチェックを想定。

/** 使い回しのため親クラスにカスタムValidationの関数を用意する */
class AppModel extends Model {
    public $uses = array('User');

    public function existsUser($check) {
        // countを使って存在チェック
        $count = $this->User->find('count', array('conditions'=>array('id'=>$check), 'recursive' => -1) );
        return $count > 0;
    }
}

/** validateの設定 */
class SampleModel extends AppModel {

    public $validate = array(
        'user_id' => array(
            'existsUser' => array(
                'rule' => 'existsUser',
                'message' => '存在するユーザーのIDを入力してください'
            )
        )
    );
}