我有一个模型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
会出错
答案 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}).");
}
}