2016-12-27 3 views
0

Gibt es eine Möglichkeit, die eindeutigen Periodenzeiten zu validieren, die durch zwei Spalten (start_date, end_date) festgelegt werden? Bitte lassen Sie mich wissen, wenn dies möglich ist, indem Sie Laravel 5.3 Validator verwenden.Laravel 5.3 Validierung: Eindeutige Periodenzeit, die durch zwei Spalten gesetzt wird (start_datum, end_datum)

Dank Arvi

+0

Wer hat diese Spalten gesetzt? Wo werden diese Spalten festgelegt? – anwerj

+0

Sie stammen aus der Datenbanktabelle. –

+0

Sie wollen also, dass der Unterschied einzigartig ist? können Sie einen Code oder Testfall einfügen, den Sie verwenden – anwerj

Antwort

1

So weit ich weiß, gibt es keine Möglichkeit, solche komplexen benutzerdefinierten Regeln auf Laravel zu erreichen. Ich verstehe, dass Sie wirklich wollen, wie dies einige tun:

////////////////////////////////////////////////// 
// This is not working code. just an idea !!! 
// 
$data['period'] = $data['start_date'] . "-" . $data['end_date']; 
     $validator = Validator::make($data, [  
      'period' => Rule::unique('projects', DB::raw('concat(start_date, "-", end_date)')), 
     ], [ 
      'period' => 'Period is duplicated.', 
     ]); 

Aber Larvel nicht diese Art der Regel akzeptieren (eigentlich frage ich mich, warum sie nicht diese Art von Ansatz akzeptieren)

So haben Sie 2 Optionen.

Lösung 1. Erstellen Sie eine Ansicht in der Datenbank, die zusätzliche Spalte "Periode" haben wird, die von concat (Startdatum, "-", Enddatum) gemacht wird. Und dann den Code wie folgt machen.

$data['period'] = $data['start_date'] . "-" . $data['end_date']; 
     $validator = Validator::make($data, [  
      'period' => Rule::unique('projects', DB::raw('concat(start_date, "-", end_date)')), 
     ], [ 
      'period' => 'Period is duplicated.', 
     ]); 

if ($validator->fails()) { 
    // do some thing 
} else { 
    unset($data['period']); // When adding or update, 'period' will cause error because period is only in view, not in table itself 
    // do insert or update 
} 

Lösung 2. Nur normale Validierung mit Ausnahme der einmaligen Überprüfung passieren, schließlich Validierung getan, Sie selbst tun Überprüfung manuell in der Tabelle durch die Suche. Wie folgt:

if (Project::where(DB::raw("concat(start_date, '-', end_date)"), "=", $data['start_date'] . "-" . $data['end_date'])->count() > 0) { 
    // now this is not unique, so do something 
} 
Verwandte Themen