2015-01-10 16 views
6

Ich versuche, beim Einfügen eines Datensatzes mit eloquent in Laravel zu identifizieren, wenn es eine Ausnahme aufgrund eines eindeutigen Feldfehlers löst.Laravel fangen Eloquent "Unique" -Feld Fehler

Der Code, den ich bisher habe, ist:

try { 

    $result = Emailreminder::create(array(
         'user_id' => Auth::user()->id, 
         'email' => $newEmail, 
         'token' => $token, 
      )); 

} catch (Illuminate\Database\QueryException $e) { 
    return $e; 
} 

Es löst eine Ausnahme OK Ich weiß einfach nicht, was sie als eine Spalte doppelte Fehler zu identifizieren, zu tun?

Danke,

Gavin.

+0

Erstes Hinzufügen von Code! Es tut uns leid! – Gavin

+1

Da einer der Hauptvorteile von Eloquent Code ist, der nicht für eine bestimmte Datenbank spezifisch ist, möchten Sie wahrscheinlich nicht zulassen, dass dieser Fehler zuerst ausgelöst wird. Es ist wahrscheinlich eine andere Implementierung erforderlich, um es basierend auf der von Ihnen verwendeten Datenbank abzufangen. Der richtige Weg, dies zu programmieren, wäre, zuerst zu prüfen, ob der Datensatz in der Datenbank ist und ihn dort zu behandeln. – TonyArra

Antwort

22

Ich nehme an, Sie MySQL verwenden, ist es wahrscheinlich anders für andere Systeme

Okay, zuerst den Fehlercode für duplicate entry is 1062. Und hier ist, wie Sie den Fehlercode aus der Ausnahme abrufen:

catch (Illuminate\Database\QueryException $e){ 
    $errorCode = $e->errorInfo[1]; 
    if($errorCode == 1062){ 
     // houston, we have a duplicate entry problem 
    } 
} 
+0

Excatly, was ich nach thanks war. Obwohl @TonyArra hat einen Punkt über Eloquent als DB unabhängig. Die Art und Weise, wie ich es geschafft habe, war die einzigartige Validierungsregel von Laravels. Das Problem damit, dass die betreffende Tabelle eine andere war als die Tabelle, aus der die ursprüngliche Information stammte, so dass ich mehrere Validierungsanweisungen schrieb, die ich als unordentlich empfand. So, jetzt frage ich mich, gehe ich mit Laravels DB-Unabhängigkeit oder akzeptiere die Tatsache, dass die App wahrscheinlich nie eine andere DB als MySQL verwenden wird und nur daran binden !! Hmmmm ..... – Gavin