0

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

4

3 回答 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

阅读: http: //kohanaframework.org/3.1/guide/kohana/security/validation

于 2011-06-02T18:28:36.990 回答