Cakephp で2重登録の回避
2重登録をどうやってチェックしようか悩んでいたところ、
ここにヒントがありました。
↓ ↓ ↓
Preventing Duplicate Form Submissions in CakePHP
マニュアルにもありましたが、http://book.cakephp.org/ja/view/432/postConditions
postConditionsというメソッドがあるらしい。。。
そのまま使うと、$this->dataをすべて対象として扱うので、$this->dataにカラムがなかったりするとエラー。
どうするんだ?と思って中身をのぞいてみると、
array_key_existsでチェックしているもよう。。。
とりあえず、
という感じに渡したら、
SELECT COUNT(*) AS `count` FROM `users` AS `User` WHERE `User`.`login_id` = 'admin'
という感じのSQLをつくってくれました。
いつも(?)のように $opにはarray('User.login_id')だけでいいかと思ってましたが・・・。
array('User.login_id'=>'')
値は特にしていしなくても勝手に代入してくれてるみたいです。
トークンでチェックとかしてみたいけどやりかたがよく分かりません・・・。
ここにヒントがありました。
↓ ↓ ↓
Preventing Duplicate Form Submissions in CakePHP
マニュアルにもありましたが、http://book.cakephp.org/ja/view/432/postConditions
postConditionsというメソッドがあるらしい。。。
そのまま使うと、$this->dataをすべて対象として扱うので、$this->dataにカラムがなかったりするとエラー。
どうするんだ?と思って中身をのぞいてみると、
array_key_existsでチェックしているもよう。。。
とりあえず、
if ($this->User->hasAny($this->postConditions($this->data,array('User.login_id'=>''),null,true))) {
$this->Session->setFlash('既に登録されています','/flash/error');
}else{
$this->User->save();
$this->Session->setFlash('登録ありがとうございます','/flash/success');
}
?>
という感じに渡したら、
SELECT COUNT(*) AS `count` FROM `users` AS `User` WHERE `User`.`login_id` = 'admin'
という感じのSQLをつくってくれました。
いつも(?)のように $opにはarray('User.login_id')だけでいいかと思ってましたが・・・。
array('User.login_id'=>'')
値は特にしていしなくても勝手に代入してくれてるみたいです。
トークンでチェックとかしてみたいけどやりかたがよく分かりません・・・。