2014-03-31 43 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

相關問題