【问题标题】:Yii validation rule - uniqueYii 验证规则 - 唯一
【发布时间】:2012-05-03 13:39:05
【问题描述】:

在 Yii 框架中,我可以使用唯一验证规则来检查某个条件下字段的唯一性(我知道有条件,但是这个条件有点棘手)?即,我想检查 property_id 唯一的 num_days。

表:

NUM PROP_ID

3   4

3   5

如果我尝试插入 3、6,验证应该通过,但在 3、4 的情况下失败

【问题讨论】:

    标签: php yii


    【解决方案1】:

    查看UniqueAttributesValidatorthis answer。在链接中,您会看到他们已将$this->attributename 用于CUniqueValidator 的criteria 选项的params 数组,但出于某种原因,$this->attributename 对我来说是null。我认为这是因为 $this 没有正确传递给验证器,所以无论如何最好使用 UniqueAttributesValidator 类,因为它只是针对这些情况而设计的。

    生成的 sql 将有一个像这样的WHERE 子句:

    SELECT ... WHERE (`num`=:value) AND (`prop_id`=:prop_id) ...
    

    这很容易失败 3, 4 而通过 3, 6。所以它应该适合你的情况。

    【讨论】:

    • 是的,你是对的。但我更喜欢第二种方法。无论如何,非常感谢。
    • 很高兴我能以某种方式提供帮助
    【解决方案2】:

    首先在您的表中创建唯一字段

    并在模型中将此添加到您的规则()中

     array('field_name', 'unique'),
    

    对于两个唯一字段的组合,请使用此代码

    public function rules() {
    return array(
        array('firstKey', 'unique', 'criteria'=>array(
            'condition'=>'`secondKey`=:secondKey',
            'params'=>array(
                ':secondKey'=>$this->secondKey
            )
        )),
    );
    }
    

    【讨论】:

      【解决方案3】:

      创建您的自定义验证器或验证函数,很简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多