シェアする

  • このエントリーをはてなブックマークに追加

[CakePHP2.4.*]ModelのバリデーションでisUniqueの複数フィールド指定が効かない問題

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未満を利用している場合は要注意。
マニアックなネタでした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする