2014-03-31 19 views
0

所以我需要验证,如果两个字段是相同的,而不是每个字段本身。我的意思是:CakePHP独特的复合字段验证(不是唯一的每个字段,但作为一个整体)

id (auto increment) | field_1 | field_2 
------------------------------------------ 
      1   | 1  | 1 

如果我试图插入null,1,1它会显示错误。但如果我去null,1,2它插入没有问题。

总之,整个(field_1,field_2)是唯一的(也称为复合主键)。

我该如何在Model中进行验证?

编辑:我尝试这样做:Validation rule for a composite unique index (non-primary),但它证明了它自己的每一个领域,所以如果我去null,1,2它不会插入,造成field_1 = 1已经存在于表

+0

我用我的 “validateUnique” 对于这一点,见[这里](http://www.dereuromark.de/2011/10/07/maximum-power-for-your-validation -rules /)。 – mark

回答

-1

在模型上试试这个自定义验证功能。

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

}

1

Model::isUnique()是一个可以使用并已在CakePHP内核中实现的规则。

如果任何传递的字段匹配任何匹配值(默认情况下,全部为$或= false),则返回false。

isUnique(array('field1', 'field2'), false)); 

注意假,如果第二ARG未设置为false,像你这样的,因为它使用或代替,然后希望它不会工作。

+0

http://book.cakephp.org/2.0/en/models/data-validation.html它没有提及该函数接收参数 –

+0

API文档的确如此。 http://api.cakephp.org/2.4/source-class-Model.html#3249-3291随时纠正这本书,它是开放的,每个人都可以进行更改。 – burzum

相关问题