我有一个用于注册和更新数据的表单。 它工作正常,但是当我更新数据时,模型验证返回false,因为插入的值已经存在。
我有以下代码:
/* Validation Rule*/
public $validate = array(
'unique' => array(
'rule' => array('unique', 'field in the table'),
'message' => 'The field cannot be empty.'
)
...
)
/* Function that check if the value already exists */
public function unique($value, $field) {
$check = $this->find('count', array(
'recursive' => -1,
'conditions' => array(
$this->Alias.$field => $value
)
));
return $check == 0;
}
那么,我如何禁用唯一规则,但保留其他规则?
答案 0 :(得分:4)
您可以在验证规则中添加on
,并仅在create
上接受此验证:
public $validate = array(
'unique' => array(
'rule' => array('unique', 'field in the table'),
'message' => 'The field cannot be empty.',
'on' => 'create'
);
);
答案 1 :(得分:3)
您可以在从控制器更新数据之前动态删除验证。
// Completely remove all rules for a field
$this->validator()->remove('field in the table');
// Remove 'unique' rule from field in the table
$this->validator()->remove('field in the table', 'unique');
答案 2 :(得分:0)
我在CakePHP 2.8的MyController中使用了它:
$this->MyModel->validator()->remove('field_name');