2017-12-05 2 views
0

Ich habe ein Modell Printer, ein Modell Category, und ein Modell für die Beziehung zwischen den beiden Modellen CategoryPrinterRelYii2 - Einzigartiger Validator zwei Attribute verschiedene Modelle

Im CategoryPrinterRel Modell, das ich eine einzigartige Validator zwischen den $category_id benötigen, und der Client des Druckers $printer->client_id

bis jetzt ich

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

versucht haben gibt es eine andere Art und Weise zu tun das obwohl? Das Problem mit der Methode, die ich verwendet habe, ist, dass, wenn das printer Objekt leer ist, versucht $this->printer->client_id einen Fehler gibt

+0

Das erste Element Ihrer Regeln sollte ein Array von Attributen sein (ihre Namen in String-Form). '$ this-> printer-> client_id' ist ein * Wert * (wahrscheinlich eine ganze Zahl?). Das wird nie funktionieren. – mae

+0

Ich habe diese Regeln, aber ich habe sie hier der Kürze halber weggelassen. Und es hat funktioniert, aber wie ich schon erwähnt habe, gibt es mir Fehler, wenn der Drucker leer ist – mrateb

+0

Ich versuche, einen alternativen Weg zu finden – mrateb

Antwort

0

Ich war auf der Suche nach etwas elegantere oder eingebaut. Vorerst ich aber für eine benutzerdefinierte Validator entschieden haben . Im Modell:

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

    } 
Verwandte Themen