Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP唯一复合字段验证(不是每个字段唯一,而是作为一个整体)_Cakephp_Cakephp 2.0 - Fatal编程技术网

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