蛋糕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
错误。
我如何解决这个问题?
答案 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;
}