2016-08-09 190 views
1

Wie kann ich eine dynamische Minimal- und Maximalvalidierung für einen bestimmten Artikel erstellen?Yii2 - Dynamische Minimal- und Maximalwertvalidierungsregeln

Für den Kauf Ich bin mit Modell kaufen, und für Produkte Ich benutze Modell Produkte. Ich muss diese Regeln im Buy-Modell implementieren.

Beispiel - Ich suche Artikel mit ID , und dieser Artikel haben Lager von 100 Einheiten (das muss maximal sein) und Mindestbestellmenge von 10 (das muss minimal sein).

EDIT:

Produkte (Artikel) Tabelle:

id 
name 
stock 
minOffer 

kaufen Tabelle:

id 
offer 
product_id 
user_id 

Angebot für den Kauf nicht aktuelle Aktien größer sein in der Produkttabelle.

+0

Es wäre schön, wenn Sie alle Felder in der Ansicht auflisten können und jedes Feld angeben gehört, welches Modell –

+0

@KiranMuralee - Ich habe Tabelle Beschreibung. – Sasha

+0

Sie sagen also, wenn der Artikel-ID-Wert gleich 12 ist, dann sollte der Bestand max 100 sein. Warum verwenden Sie keinen benutzerdefinierten Validator? –

Antwort

1

In Ihrem Kaufmodell können Sie Ihre benutzerdefinierte Regel wie unten beschrieben schreiben.

public function rules() 
    { 
     return [ 
      ['product_id', 'checkmaxandminvalues'],//assuming product_id is a field in Buy 

      // other rules 
     ]; 
    } 

public function checkmaxandminvalues($attribute, $params) 
{ 
    $your_product=Products::find()->where(['_id'=>$this->product_id])->one(); 

    //Here you do your validation logic 
    if($your_product->_id === 12 && $your_product->stock > 100) 
    { 
     $this->addError('product_id', 'Product stock should not be greater than 100'); 
    } 
    else if($your_product->_id===12 && $your_product->stock < 10) 
    { 

     $this->addError('product_id', 'Product stock should not be less than 10'); 
    } 
}