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

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;
}
  1. コメントはまだありません。

  1. トラックバックはまだありません。