Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii对不同表的两列进行唯一验证,即复合唯一验证_Php_Validation_Yii_Composite Key_Unique Constraint - Fatal编程技术网

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

Php Yii对不同表的两列进行唯一验证,即复合唯一验证,php,validation,yii,composite-key,unique-constraint,Php,Validation,Yii,Composite Key,Unique Constraint,我有两个表table1和table2,每个表都有一个名为email的列以及其他不同的列。我想要的是一个验证器,它在两列的email字段中查找唯一性。我发现了一个检查同一个表的多个列的方法。如何扩展它以使其适用于多个列?您可以使用className属性为其他类指定 文件: 应用于查找正在验证的属性值的ActiveRecord类名。默认为null,表示使用当前正在验证的对象的类。您可以在此处使用路径别名引用类名。 让我们在两个模型中拥有一个名为common_attr的属性: class Model1

我有两个表
table1
table2
,每个表都有一个名为
email
的列以及其他不同的列。我想要的是一个验证器,它在两列的
email
字段中查找唯一性。我发现了一个检查同一个表的多个列的方法。如何扩展它以使其适用于多个列?

您可以使用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属性。无需任何扩展

文档:
标准属性
公共标准;
其他查询条件。这将与检查属性值是否存在于相应表列中的条件相结合。此数组将用于实例化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',
        )),
    }
}

Yii2中

简称:

['common_attr', 'unique'],
['common_attr', 'unique', 'targetClass' => AnotherClass::class],
冗长的:

class One extends \yii\db\ActiveRecord
{
    public function rules()
    {
        return [
            ['common_attr', 'unique'],
            ['common_attr', 'unique', 'targetClass' => Two::class],
        ];
    }
}

class Two extends \yii\db\ActiveRecord
{
    public function rules()
    {
        return [
            ['common_attr', 'unique'],
            ['common_attr', 'unique', 'targetClass' => One::class],
        ];
    }
}
此外,您还可以对targetAttribute使用多个唯一键:

[
    'common_attr', 
    'unique', 
    'targetClass' => One::class, 
    'targetAttribute' => ['common_attr', 'one_more_attr']
]