Cake php验证规则'isUnique'在编辑时出错

时间:2012-05-10 06:32:00

标签: cakephp cakephp-1.3

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

我如何解决这个问题?

1 个答案:

答案 0 :(得分:10)

尝试:

'isUnique' => array (

           'rule' => 'isUnique',

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

           'on' => 'create',
 )

从书中可以看出:

  

如果规则已定义'on'=> '创建',规则只会被强制执行   在创建新记录期间。同样,如果定义为   'on'=> '更新',它只会在更新期间强制执行   记录。

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

编辑: 请勿使用以下内容 - 内置的蛋糕isUnique验证已经处理

注意 - 未经测试的代码(已经很晚了,我会在早上进行测试),但它会给你一个想法

将以下内容添加到模型中并更改“rule”=> 'isUnique','rule'=> 'isUniqueName'并删除'on'=> '创建'

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;
}