CakePHP独特的复合字段验证(不是每个字段都是唯一的,但作为一个整体)

时间:2014-03-31 16:44:38

标签: cakephp cakephp-2.0

所以我需要验证两个字段是否相同,而不是每个字段都是自己的。我的意思是:

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已存在于表

2 个答案:

答案 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;
}

}