是否存在“唯一”验证规则(如果存在,如何实现?)或必须通过回调实现? 感谢。
答案 0 :(得分:3)
) 据我所知,Validation类没有通用的“唯一”(或“is_unique”)规则。 这可能是因为这种检查没有规律性。
但是,如果你想做得很好,你可以为你在应用程序中使用的所有模型创建一个“基础模型”(使它们扩展基础模型)。 然后,可以或多或少地检查唯一性:
public function is_unique($id)
{
return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
->from($this->_table_name)
->where('id', '=', $id)
->execute()
->get('total');
}
在验证规则中,您必须添加以下规则:
array('id' => array(array(array($this, 'is_unique')));
我按照建议将方法rules()
中存储的内部模型规则存储起来。
所以可以成为一个实例:
class Model_Base_Model extends ORM
{
public function rules()
{
return array(
'id' => array(
array(array($this, 'is_unique')),
);
}
public function is_unique($id)
{
return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
->from($this->_table_name)
->where('id', '=', $id)
->execute()
->get('total');
}
}
现在,扩展 Model_Base_Model 的每个模型现在都可以在创建时检查它的唯一性。 希望这可以帮助! :)
答案 1 :(得分:3)
在Kohana 3.2中ORM有一个唯一的()方法进行检查,我不确定它是否存在于3.1中,但它应该。
有了这个,您可以像这样在模型中添加规则:
array(array($this, 'unique'), array('some_field', ':value')),
它会检查some_field是否唯一
答案 2 :(得分:0)