2

Cake の PHP 検証 'isUnique' で編集時にエラーが発生する

 var $validate = array(
    'name' => array(
        'notempty' => array(
            'rule' => array('notempty'),
        ),
       'isUnique' => array (

           'rule' => 'isUnique',

           'message' => 'This person name already exists.'
       )

)
);

ここで、既存の名前で新しい人を追加するとエラーThis person name already exists が発生しますが、問題ありません。しかし、既存の人の編集でも同じisUniqueエラーが発生します。

どうすればそれを整理できますか?

4

1 に答える 1

10

試す:

'isUnique' => array (

           'rule' => 'isUnique',

           'message' => 'This person name already exists.',

           'on' => 'create',
 )

本から:

ルールで 'on' => 'create' が定義されている場合、ルールは新しいレコードの作成中にのみ適用されます。同様に、'on' => 'update' と定義されている場合、レコードの更新中にのみ適用されます。

ただし、名前の変更が許可されていて、他のレコードからの一意性が必要な場合は、編集中の ID のレコードと同じかどうかを確認するカスタムの一意の検証が必要になる場合があります。不合格。

編集: 以下は使用しないでください - Cakes 組み込みの isUnique 検証で既に処理されています

注 - テストされていないコード (遅くなりました。朝にテストします)。

以下をモデルに追加し、'rule' => 'isUnique' を 'rule' => 'isUniqueName' に変更し、'on' => 'create' を削除します。

public function isUniqueName($fields) {
        $conditions = array($this->alias . '.name' => $this->data[$this->alias]['name']);
        if (isset($this->data[$this->alias][$this->primaryKey])) {
            $conditions[$this->alias . '.' . $this->primaryKey . ' <>'] = $this->data[$this->alias][$this->primaryKey];
        }
        return $this->find('count', compact('conditions')) == 0;
}
于 2012-05-10T07:16:34.790 に答える