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