2016-04-07 11 views
2

I Mitarbeiter haben, die hat (Autoinkrement) eindeutige ID in der Datenbank (ziemlich einfach :)), aber ich möchte die Einzigartigkeit anderen Feld überprüfen, die ihre employee_number sein ..Laravel Validator - Integrität Einschränkungsverletzung

während die neuen Mitarbeiter zu schaffen, ist es ziemlich einfach, weil ich einfach anrufen:

$this->validate($request, [     
          'employee_number' => 'required|unique:employees' 
          ]); 

Aber wie kann ich diese während tun Bearbeitung vorhandener Mitarbeiter? Ich möchte überprüfen (wenn die „bearbeitet“ employee_number für ANDERE Benutzer einzigartig ist ... es bedeutet, dass ich diese Abfrage neu zu schreiben, müssen Validierungs Formular Laravel

employee_number NOT IN (SELECT employee_number 
         FROM employees 
         WHERE id = *edited_user_id*) 

Ich habe versucht, diese

zu tun
$this->validate($request, [     
          'employee_number' => 'required|unique:employees,id,'.$input['employee_id'] 
          ]); 

Stell dir vor, es gibt Aufzeichnungen in einer Tabelle „Mitarbeiter“

id | name | employee_number 
----------------------------- 
1 | Peter |  0001 
2 | Paul |  0002 
3 | Frank |  0003 

wenn ich versuche, Frank Daten zu ändern -> es ist ok .. auch wenn ich seine ändern Mitarbeiter-Nummer zu einigen einzigartigen, es funktioniert ok ..

Aber wenn ich eine für Frank's Konto, dh 0001 einfügen gibt es mir keine richtige Fehlermeldung (aus Validator), dass Mitarbeiter Nummer bereits vergeben ist .. aber statt dass es leitet mich auf die Fehlerseite

Whoops, looks like something went wrong. 

QueryException in Connection.php line 669: 
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0001' for key 'employees_employee_number' (SQL: *here comes the wrong sql query*) 

wissen Sie, wie kann ich die richtigen Fehlerbalken rechts oberhalb der Form heben wie wenn ich versuche, neue Mitarbeiter einzusetzen und versuchen, die bestehende ID einfügen?

Antwort

3

Sie haben einen kleinen Fehler in 'required|unique:employees,id,'.$input['employee_id'] gemacht. Jetzt suchen Sie, wenn Ihre Eingabe employee_number in employees Tabelle von id Feld eindeutig ist.

Ändern Sie diese Zeile zu: 'required|unique:employees,employee_number,'.$input['employee_id'] und Sie sind gut zu gehen!

Von Lavarel Dokumentation: unique:table,column,except,idColumn.

+0

maaaaaaan, du bist mein Lebensretter :) Ich schulde dir ein Bier !! +1 vielen Dank –

1

Wenn der Validator nicht ich die Fehlermeldung gesammelt als

gezeigt
$rules = ['employee_number' => 

    'required|unique:employees,employee_number,'.$input['employee_id']] 

    $validator = \Validator::make($data = \Input::all(), $rules); 

      if ($validator->fails()) { 
       return [ 
        return [ 
         "status" => "fail", 
         "errors" => $validator->getMessageBag()->toArray() 
     ]; 
       ]; 
      } 

nun die Antwort von sammeln, wo Sie Ihre Anfrage gesendet und als Antwort erhalten Sie eine assoziative Array von Fehlermeldungen, die Sie es verwenden können nach zu Ihrer Verwendung.

Verwandte Themen