cakephpで重複チェック
cakephpでメールアドレスやIDなどのプライマリーキーの重複チェックを行う関数を書いてみました。
function unique($data, $name){ $this->recursive = -1; $found = $this->find(array("{$this->name}.$name" => $data)); return !$found; }
実際には、モデルのvalidateで
'rule' => array( 'unique', $primaryKey ),
のように呼び出します。
この関数の中で
$this->recursive = -1;
としていますが、これはデータをとってくる際に、
どこまで連携しているテーブルのデータを取るかを指定しています。
この値を変えることにより、データの取得範囲を決めることができます。
具体的には以下の図を。
recursiveの範囲
-1 | カレントテーブルのみ |
0 | カレントテーブル+第1次アソシエーションテーブル(hasOne,belongsTo) |
1 | カレントテーブル+全ての第1次アソシエーションテーブル |
2 | 上記+第2次アソシエーションテーブル |
3以上 | 上記+第3(以上)次のアソシエーションテーブル |