Yii2-唯一验证器两个属性不同的模型

Yii2-唯一验证器两个属性不同的模型,yii,yii2,Yii,Yii2,我有一个模型打印机,一个模型类别,以及两个模型类别之间关系的模型PrinterEl 在CategoryPrinterRel模型中,我需要在$category\u id和打印机的客户端$printer->client\u id之间有一个唯一的验证器 到目前为止,我已经试过了 public function rules() { [['category_id', $this->printer->client_id], 'unique', 'targetAttribute' =&

我有一个模型打印机,一个模型类别,以及两个模型类别之间关系的模型PrinterEl

在CategoryPrinterRel模型中,我需要在$category\u id和打印机的客户端$printer->client\u id之间有一个唯一的验证器

到目前为止,我已经试过了

public function rules()  
{
    [['category_id', $this->printer->client_id], 'unique', 'targetAttribute' => ['category_id']]
}
有没有其他方法可以做到这一点?
我使用的方法的问题是,当打印机对象为空时,尝试$this->printer->client\u id会出现错误

我正在寻找更优雅的或内置的。不过,现在我选择了自定义验证器。在模型中:

public function rules()
{
    return [
        [['category_id', 'printer_id'], 'integer'],
        [['printer_id', 'category_id'], 'required'],
        [['cat_id'],'validateUniquenessOnClient']
    ];
}

public function validateUniquenessOnClient($attribute, $params, $validator)
    {
        $isPrinterUniqueOnClient = DbPrinterRepository::IsPrinterCatRelUniqueOnClient($this->category_id, $this->printer_id);
        if(!$isPrinterGroupUniqueOnClient)
        {
            $this->addError($attribute, "There is already a printer using that category ({$this->cat->name}).");
        }

    }

规则的第一项应该是一个属性数组,它们的名称是字符串形式的$此->打印机->客户端id是一个值,可能是一个整数?。这是行不通的。我确实有这些规则,但为了简洁起见,我省略了它们。它是有效的,但正如我提到的,当打印机空的时候,它会给我带来错误。我正在尝试另一种方法