【问题标题】:Kohana 3.1 ORM: How to implement a "unique" validation rule?Kohana 3.1 ORM:如何实现“唯一”验证规则?
【发布时间】:2011-06-02 17:43:18
【问题描述】:

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

【问题讨论】:

    标签: php kohana kohana-3 kohana-orm


    【解决方案1】:

    ) 据我所知,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 的模型现在都可以在创建时检查它的唯一性。 希望这可以帮助! :)

    【讨论】:

    • 再次感谢您!我实现了一个非常相似的解决方案。
    【解决方案2】:

    在 Kohana 3.2 中,ORM 有一个 unique() 方法来进行检查,我不确定它是否存在于 3.1 中,但它应该存在。

    这样你就可以像这样向你的模型添加一个规则:

    array(array($this, 'unique'), array('some_field', ':value')),
    

    它会检查 some_field 是否是唯一的

    【讨论】:

    • 是的,这就像 KO 3.2 中的魅力一样开箱即用。无论如何,这个问题是指v3.1。谢谢!
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多