2016-11-06 1 views
0

Um es einfach auszudrücken, was ich tun möchte, ist zu überprüfen, ob der Wert eines bestimmten Eingangs exists in der Datenbank ist , aber ich möchte, dass die Regel exists nur dann angewendet wird, wenn auch eine andere Eingabe mit einem bestimmten Wert vorhanden ist.Wenden Sie eine bestimmte Validierungsregel auf einen bestimmten Eingang an, nur wenn ein anderer Eingang ebenfalls vorhanden und auf einen bestimmten Wert eingestellt ist

Zum Beispiel habe ich ein Formular mit einer Auswahl namens type und ein Textfeld mit dem Namen id.

<select name="type"> 
    <option value="0">Type0</option> 
    <option value="1">Type1</option> 
</select> 

<input type="text" name="id"> 

Wenn die type vorhanden ist und gleich zu 1 ich, wenn der id Eingang exists in der Datenbanktabelle users, da sonst die exists Regel überprüfen möchten nicht angewendet werden, während der Rest der Gültigkeitsregel wie üblich angewendet werden.

Edit:

Vorzugsweise Ich möchte ein Formular Anfrage verwenden, um die Validierung zu tun. Kann das mit einer Formularanfrage erreicht werden?

Antwort

1

Sie können conditionally hinzufügen Regeln wie:

$v = Validator::make(...); 

$v->sometimes('id', 'exists:table,column', function($input) { 
    return $input->get('type') == 1; 
}); 

aktualisieren

Für form request können Sie tun, wie:

$rules = [ 
    ..., 
]; 

if ($this->get('type') == 1){ 
    if (isset($rules['id'])){ 
     $rules['id'] .= '|exists:table,column'; 
    } 
    else { 
     $rules['id'] = 'exists:table,column'; 
    } 
} 

return $rules; 
+0

Danke, dass genau meine Frage beantwortet. Wissen Sie, ob das Gleiche in einer Formularanfrage erreicht werden kann? –

+0

Ich habe gerade entdeckt, dass es auch durch Überschreiben der 'validate' Methode des 'ValidatesWhenResolvedTrait'-Merkmals gemacht werden kann, aber Ihre Lösung ist viel eleganter, also werde ich das verwenden. –

+0

Ich habe eine kleine Ergänzung zu Ihrer Antwort gemacht, weil sie in ihrer vorherigen Form alle vordefinierten Regeln für das Zielfeld überschrieben hat. Jetzt prüft es zuerst, ob irgendwelche Regeln für dieses Feld bereits existieren und wenn ja, hängt es die 'exists'-Regel an sie an. –

Verwandte Themen