Cookbookを見ると、では、バリデーションで複数のフィールドを指定できることになっているけど、実際はリンク先の例だとemail
のisUniqueしか効かない。
調べたら、CakePHP2.5.6以前はバグで動作しないみたい。
Fix Model::isUnique() not working as a validator. by markstory ? Pull Request #4851 ? cakephp/cakephp
こちらを読むと、ModelのメソッドとしてisUniqueを使う場合には複数のフィールド指定ができるとあったので、参考サイトのままだけど以下のようにして対応した。
AppModel.php
public function checkUnique($ignoredData, $fields, $or = true) { return $this->isUnique($fields, $or); }モデルのvalidate
public $validate = array( 'email' => array( 'rule' => array('checkUnique', array('email', 'username'), false), 'message' => 'このユーザ名とメールアドレスの組み合わせはすでに使われています。' ) );
CakePHPの2.5.6未満を利用している場合は要注意。
マニアックなネタでした。