2013-05-10 116 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