蛋糕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错误。

我如何解决呢?

最佳答案

尝试:

'isUnique' => array (

           'rule' => 'isUnique',

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

           'on' => 'create',
 )


从书中:


如果规则定义为“ on” =>“ create”,则该规则将仅被强制执行
在创建新记录的过程中。同样,如果定义为
'on'=>'update',它将仅在更新
记录。


但是,如果允许他们更改名称,而您仍然需要其他记录的唯一性,则可能需要自定义唯一性验证,该验证将检查它是否与我正在编辑的id的记录相同,否则失败。

编辑:
请勿使用以下内容-内置的蛋糕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;
}

09-29 19:35