Kohana 3.1 ORM:如何实现“唯一”验证规则?

时间:2011-06-02 17:43:19

标签: php kohana kohana-3 kohana-orm

是否存在“唯一”验证规则(如果存在,如何实现?)或必须通过回调实现? 感谢。

3 个答案:

答案 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)