是否存在“唯一”验证规则(如果存在,如何实现?)还是必须通过回调实现?谢谢。
问问题
5053 次
3 回答
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的模型现在都可以在创建时检查它的唯一性。希望这可以帮助!:)
于 2011-06-02T18:36:13.370 回答
3
在 Kohana 3.2 中,ORM 有一个 unique() 方法来进行检查,我不确定它是否存在于 3.1 中,但它应该存在。
有了它,你可以像这样向你的模型添加一个规则:
array(array($this, 'unique'), array('some_field', ':value')),
它会检查 some_field 是否是唯一的
于 2012-01-13T16:06:26.860 回答
0
于 2011-06-02T18:28:36.990 回答