cutmail's blog

write the code

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;

としていますが、これはデータをとってくる際に、
どこまで連携しているテーブルのデータを取るかを指定しています。

この値を変えることにより、データの取得範囲を決めることができます。

具体的には以下の図を。

http://www.cpa-lab.com/tech/public/image/spok/200802/CakePHP_recursive_attention.jpg

recursiveの範囲

-1 カレントテーブルのみ
0 カレントテーブル+第1次アソシエーションテーブル(hasOne,belongsTo)
1 カレントテーブル+全ての第1次アソシエーションテーブル
2 上記+第2次アソシエーションテーブル
3以上 上記+第3(以上)次のアソシエーションテーブル