2016-03-30 4 views
2

Wenn ich Ortsnamen aktualisiere, brauche ich eine Validierung, um mehrere Zeilen in der Tabelle zu überprüfen, nicht nur eine einzelne ID.Validierungsregel, die auf mehrere Zeilen überprüft werden soll

Meine Tabelle sieht wie folgt aus:

+----+--------------+-----------+----------+ 
| id |  name  | lat | lng | 
+----+--------------+-----------+----------+ 
| 1 | Location One | 53.348333 | 0.348333 | 
| 2 | Location One | 57.348222 | 0.348222 | 
| 3 | Location One | 57.348111 | 0.545454 | 
| 4 | Location Two | 55.348554 | 0.555444 | 
| 5 | Location Two | 56.348667 | 0.348333 | 
| 6 | Location Two | 56.348778 | 0.111111 | 
+----+--------------+-----------+----------+ 

Erstellen von neuen Standorten wie erwartet funktioniert. Aber ich bin mir nicht sicher, wie ich die Validierungsregel einstellen soll, um den aktuellen Standort auszuschließen, den ich zu aktualisieren versuche - er muss die Spalte "Name" überprüfen.

Ich hatte gehofft, dass so etwas funktionieren könnte - aber das tut es nicht.

public function rules() 
{ 
    return [ 
     'name' => 'required|max:255|unique:evac_routes,name,'.$this->name, 
     ... 
    ]; 
} 

In meinem Controller Ich verwende Route::where('name', $route->name)->update, die funktioniert, aber ich kann diese Logik auf die Gültigkeitsregel nicht konvertieren:

public function update($id, UpdateRouteRequest $request) 
    { 

     $route = Route::findOrFail($id);  

     $updateRows = Route::where('name', $route->name)->update([ 
      'name' => $request->name, 
      ... 
      ]);    

     return redirect('routes');  

    } 

Antwort

0

Sie benötigen custome Validierung erstellen und Array von IDs übergeben das möchte überprüft werden wie:

public function multipelvalidation() 
{ 
    Validator::extend('multipel', function ($attribute, $value) { 
     //check validation here and return true or false 
    }); 
} 

//... and use your rule in validation like below: 

'name' => 'required|multipel|max:255|unique:evac_routes,name,'.$this->name, 
Verwandte Themen