2013-05-10 154 views
0

我正在使用Kohana 3.3對於具有擴展ORM的模型類的項目。 MySQL數據庫中有這個模型的對應表。在這張表中,有3列不應該有相同的值。我還有一個視圖,用戶可以將其添加到此模型中,其中item1,2,3是文本輸入字段。 我想在強制規則item1,2,3不能有相同的值的模型中寫驗證。 的代碼結構和相關的部分是這樣的:Kohana驗證'匹配'規則

數據庫表:

id | column1 | othercolumns | item1 | item2 | item3 

模型類:

public function rules(){ 
    return array(
     "item1" => array(array('matches', array(':validation',':field','item2'))), 
     "item1" => array(array('matches', array(':validation',':field','item3'))), 
     //same for item2 and item3 
    ); 
} 

我讀thisthisthis頁,我無法理解如何正確實施這個直接在型號。 (我可以在JavaScript這樣做的客戶端,但我想避免這樣做,它留給框架!)

回答

1

所有你需要的是一個驗證回調:

return array(
    'item1' => array(function($field, Validation $object, $compare1, $compare2) { 
     $values = array($object[$field], $object[$compare1], $object[$compare2]); 
     if (count(array_unique($values)) < count($values)) 
     { 
      $object->error($field, 'unique_fields'); 
     } 
    }, array(':field', ':validation', 'item2', 'item3')) 
); 

它只是一個快速例。例如,您可以使用動態字段計數。

+0

謝謝,我想我明白這裏發生了什麼!感謝幫助! – rgamber 2013-05-11 00:59:20