CakePHP唯一复合字段验证(不是每个字段唯一,而是作为一个整体)
所以我需要验证两个字段是否相同,而不是每个字段本身。我的意思是:CakePHP唯一复合字段验证(不是每个字段唯一,而是作为一个整体),cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,所以我需要验证两个字段是否相同,而不是每个字段本身。我的意思是: id (auto increment) | field_1 | field_2 ------------------------------------------ 1 | 1 | 1 如果我尝试插入null,则1,1将显示错误。但是如果我去null,1,2它会毫无问题地插入它 总之,整体(字段_1,字段_2)是唯一的(也称为复合主键) 如何在模型中验证这一点 E
id (auto increment) | field_1 | field_2
------------------------------------------
1 | 1 | 1
如果我尝试插入null,则1,1
将显示错误。但是如果我去null,1,2
它会毫无问题地插入它
总之,整体(字段_1,字段_2)是唯一的(也称为复合主键)
如何在模型中验证这一点
EDIT:我尝试了这个:,但它会自己验证每个字段,因此如果我选择null,1,2
它将不会插入,因为字段1=1
已经存在于表中是一个可以使用的规则,并且已经在CakePHP核心中实现
如果传递的任何字段与any匹配,则返回false(默认情况下,如果$or,则返回all)=
false)的匹配值
请注意false,如果第二个参数未设置为false,它将无法正常工作,因为它正在使用或代替AND then。在模型上尝试此自定义验证功能
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;
}
}它没有提到API文档中的函数接收参数。请随意修改这本书,每个人都可以修改。编写自己的验证方法,下面是一个例子:这篇文章很旧,但想法是一样的。我使用我的“validateUnique”来实现这一点,请参阅。
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;
}