php - Yii 对不同表的两列进行唯一验证,即。复合唯一验证

标签 php validation yii composite-key unique-constraint

我有两个表 table1table2,每个表都有一个名为 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/

相关文章:

php - centOS 7 无法安装 php-mbstring 扩展

validation - Symfony2 : how to validate UploadedFile without form?

php - 无法使用Yii写入mPDF临时文件

button - yii 中条目的下一个/上一个按钮的最佳方式

javascript - 如何在 JSF 页面的 JavaScript 函数中使用小于或大于符号?

php - CLink 列和过滤器

php - 使用 javascript 和 json 字符串在网页中进行 http 调用

php - 如何解决 SyntaxError : JSON. parse: unexpected character at line 1 column 1 of the JSON data in ajax and php

php - 在我的本地机器上安装 magento 后,我忘记了管理员密码

wpf - DataGridCell Validation.ErrorTemplate 被忽略