model新規作成時のunique keyの重複チェック

Posted by mkamo on 2008年5月1日

CakePHPでmodelの新規作成時にunique keyの重複チェックをするにはmodelクラスのvalidates()メソッドをオーバーライドして以下のような処理をすればよい.

!array_key_exists()がないと,modelの新規作成だけでなくmodelの更新時にも重複チェックすることになってしまい,更新が不可能になってしまうので注意.

function validates($data = array()) {
    if (empty($data)) {
        $data = $this->data;
    }

    // 元々のvalidates()を呼ぶ
    parent::validates($data);

    // 新規作成時,すなわちprimary keyである'id'が$dataに格納されていないときは
    // unique keyの重複チェック
    if (!array_key_exists('id', $data['User']) &&
        $this->findByAccount($data['User']['account'])
    ) {
        $this->invalidate('account_duplicated');
    }

    // エラーがなければtrue
    return count($this->validationErrors) == 0;
}


コメントを書く




XHTML: 次のタグが使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Please note: 投稿されたコメントが表示されるにはいくらかの時間がかかります.投稿後直ちに表示されませんが投稿ボタンを何度も押さないようお願いします.