2017-11-11 4 views
0

Ich habe Probleme beim Überprüfen eines Feldes mit Feldern, die eine benutzerdefinierte Regel erfordern. Ich habe folgenden Validator:laravel 5.4 validate array mit benutzerdefinierter Regel

$validator = Validator::make($request->all(), [ 
    'order'  => 'required', 
    'service_id.*' => Rule::unique('order_services')->where('order_id', $request->order), 
    'due_date.*' => 'required|date', 
    'vendor' => 'required|integer', 
    'instructions' => 'string|nullable', 
    'lock_box' => 'string|nullable', 
    ]); 

Das Fälligkeitsdatum Array validiert ganz gut, aber die Service-ID gibt die folgenden Fehler:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'service_id.0' in 'where clause' (SQL: select count(*) as aggregate from `order_services` where `service_id`.`0` = 10 and `order_id` = 100f) 

Die Dienst id Regel verhindert, dass doppelten Datensätze mit derselben Bestellnummer und Service-ID

Die Regel funktioniert wie erwartet bei der Validierung einer einzelnen Service-ID, ich bin nur nicht sicher, wie mehrere Service-IDs gleichzeitig überprüft werden.

Vielen Dank im Voraus

Antwort

0

standardmäßig Laravel verwendet Schlüssel für unique Rolle und weil es ein Array ist, Schlüssel sind 0, 1, 2 und so weiter. Die Lösung ist das Hinzufügen von Spaltennamen für eindeutige Regel wie folgt aus:

Rule::unique('order_services', 'id')->where('order_id', $request->order), 

Offensichtlich in Ihrem Fall, dass Sie andere Spaltennamen benötigen könnten als id (es hängt von Ihrer Anwendung)

+0

Dank! Am Ende habe ich Rule :: unique ('order_services', 'service_id') verwendet -> where ('order_id', $ request-> order), – Wireland