2017-04-10 3 views
0

Ich habe diese Felder:Laravel Validierung mit Enum Spalte

id, Titel, Typ

Typ ist Enum Und ich möchte meinen Titel nach Typ Spalte bestätigen, zB:

id | title | type 
1 | test | option1 
2| test | option2 

Wenn also jemand versucht, eine Zeile mit dieser Bedingung einzufügen, sollte die Validierung für die eindeutige Spalte ausgeführt werden.

3 | test | option1 ==> should not be insert due unique validation rule. 

Wie sieht meine Validierungsregel aus?

Mit freundlichen Grüßen

Antwort

0

Es gibt keine benutzerdefinierte Regel dafür.

Sie können die Kombination zweier Spalten nicht als einzigartig nach einer nativen Validierungsregel für Laravel überprüfen.

Allerdings haben Sie zwei Möglichkeiten voraus bekommen haben:

  1. Ihre eigene Regel erstellen, die eine individuelle Prüfung verwendet werden. Reference
  2. Verwenden Sie dieses Paket: https://github.com/felixkiss/uniquewith-validator

Natürlich Kombination aus title und type einzigartig in Ihnen auch Migration.

0

Wenn das Feld type nicht dynamisch ist, können Sie die Klasse Rule verwenden, um zusätzliche Abfragen in Ihre Validierungsregel einzufügen.

return [ 
    'title' => [ 
     Rule::unique('tablename', 'title')->where(function ($query) { 
      $query->where('type', 'option1'); 
     }) 
    ] 
]; 

Andernfalls können Sie benutzerdefinierte Validierungsregeln festlegen.

0

in: option1, option2 Das Feld unter Validierung muss in der angegebenen Werteliste aufgenommen werden.

not_in: option1, option2 Das Feld unter Validierung muss nicht in der angegebenen Werteliste aufgenommen werden.

Ihre Validierung sollte wie folgt aussehen, aber Sie müssen Ihre Optionen in "in" -Parametern fest codieren oder ein Array implodieren.

$validator = Validator::make(Input::only(['title', 'type']), [ 
    'type' => 'in:option1,option2, // option1 or option2 values 
    'title' => 'required|min:6|max:255', //whatever rules you want .. 
]); 

Sie auf diese Weise 'implodieren' vermeiden:

$validator = Validator::make(Input::only(['title', 'type']), [ 
     'type' => Rule::in(['option1', 'option2']), // option1 or option2 values 
     'title' => 'required|min:6|max:255', //whatever rules you want .. 
    ]);