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

时间:2017-12-05 14:20:53

标签: yii yii2

我有一个模型Printer,一个模型Category,以及两个模型之间关系的模型CategoryPrinterRel

CategoryPrinterRel模型中,我需要$category_id与打印机客户端$printer->client_id之间的唯一验证器

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

public function rules()  
{
    [['category_id', $this->printer->client_id], 'unique', 'targetAttribute' => ['category_id']]
}

有没有其他方法可以做到这一点? 我正在使用的方法的问题是,当printer对象为空时,尝试$this->printer->client_id会出错

1 个答案:

答案 0 :(得分:1)

我正在寻找更优雅或内置的东西。但是现在我选择了自定义验证器。在模型中:

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}).");
        }

    }