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