2

蛋糕 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 回答