所以我需要验证两个字段是否相同,而不是每个字段都是自己的。我的意思是:
id (auto increment) | field_1 | field_2
------------------------------------------
1 | 1 | 1
如果我尝试插入null,1,1
,则会显示错误。但是如果我去null,1,2
它会毫无问题地插入它。
总之,整个(field_1,field_2)是唯一的(也称为复合主键)。
如何在模型中验证?
编辑:我尝试了这个:Validation rule for a composite unique index (non-primary),但它验证了它自己的每个字段,所以如果我去null,1,2
它就赢了insert,原因field_1 = 1
已存在于表
答案 0 :(得分:1)
Model::isUnique()是一个可以使用的规则,已经在CakePHP核心中实现。
如果传递的任何字段与任何字段匹配,则返回false(默认情况下,如果$或=则全部) false)他们的匹配值。
isUnique(array('field1', 'field2'), false));
注意false,如果第二个arg没有设置为false,它就不会像你想要的那样工作,因为它使用的是OR而不是AND。
答案 1 :(得分:-1)
在Model上尝试此自定义验证功能。
public function compositUniqueKey($data){
if(isset($this->data[$this->alias]['field1']) && isset($this->data[$this->alias]['field1']) ){
$check = $this->find('first', array(
'conditions' => array(
'field1' => $this->data[$this->alias]['field1'],
'field2' => $this->data[$this->alias]['field2']
)
)
);
if(!empty($check)){
return false;
}
return true;
}else{
return false;
}
}