【发布时间】:2012-05-03 13:39:05
【问题描述】:
在 Yii 框架中,我可以使用唯一验证规则来检查某个条件下字段的唯一性(我知道有条件,但是这个条件有点棘手)?即,我想检查 property_id 唯一的 num_days。
表:
NUM PROP_ID
3 4
3 5
如果我尝试插入 3、6,验证应该通过,但在 3、4 的情况下失败
【问题讨论】:
在 Yii 框架中,我可以使用唯一验证规则来检查某个条件下字段的唯一性(我知道有条件,但是这个条件有点棘手)?即,我想检查 property_id 唯一的 num_days。
表:
NUM PROP_ID
3 4
3 5
如果我尝试插入 3、6,验证应该通过,但在 3、4 的情况下失败
【问题讨论】:
查看UniqueAttributesValidator 和this 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。所以它应该适合你的情况。
【讨论】:
首先在您的表中创建唯一字段
并在模型中将此添加到您的规则()中
array('field_name', 'unique'),
对于两个唯一字段的组合,请使用此代码
public function rules() {
return array(
array('firstKey', 'unique', 'criteria'=>array(
'condition'=>'`secondKey`=:secondKey',
'params'=>array(
':secondKey'=>$this->secondKey
)
)),
);
}
【讨论】:
创建您的自定义验证器或验证函数,很简单。
【讨论】: