我有两个表 table1
和 table2
,每个表都有一个名为 email
的列以及其他不同的列。我想要的是一个验证器,它在两列的 email
字段中寻找唯一性。我找到了一个 extension它检查 SAME 表的多个列。我如何扩展它以便它适用于多列?
最佳答案
您可以使用 className 属性为其他类指定..
文档:
应该用于查找正在验证的属性值的 ActiveRecord 类名。默认为 null,这意味着使用当前正在验证的对象的类。您可以在此处使用路径别名来引用类名。
让我们在两个模型中有一个名为 common_attr 的属性:
class Model1 extends CActiveRecord{
public function rules(){
array('common_attr', 'unique', 'className'=> 'Model1'),
array('common_attr', 'unique', 'className'=> 'Model2'),
}
}
class Model2 extends CActiveRecord{
public function rules(){
array('common_attr', 'unique', 'className'=> 'Model1'),
array('common_attr', 'unique', 'className'=> 'Model2'),
}
}
要检查来自多个表的组合键
验证,您可以使用 CUniqueValidator 的 criteria 属性。 不需要任何扩展
文档:条件属性
公共(public)数组 $criteria;
附加查询条件。这将与检查相应表列中是否存在属性值的条件相结合。该数组将用于实例化 CDbCriteria 对象。
class Model1 extends CActiveRecord{
public function rules(){
array('common_attr', 'unique', 'caseSensitive'=>false,
'criteria'=>array(
'join'=>'LEFT JOIN model2 ON model2.common_attr=model1.common_attr',
'condition'=>'model2.common_attr=model1.common_attr',
)),
}
}
关于php - Yii 对不同表的两列进行唯一验证,即。复合唯一验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087764/