2015-11-12 3 views
10

Alles, was ich versuche, ist eine Abfrage zu überprüfen.Wie kann ich eine Abfrage Ausnahme in Laravel abfangen, um zu sehen, ob es fehlschlägt?

'SELECT * from table_that_does_not_exist' 

Ohne dass erroring aus, würde Ich mag es wissen, ist fehlgeschlagen, so kann ich eine Antwort zurück, die besagt, „Fehler: Tabelle nicht vorhanden“ oder die allgemeinen Fehler.

+0

Wenn Sie mit 'Eloquent' für Ihre Fragen, könnten Sie' firstOrFail() 'auf' DB :: raw() 'Abfrage. Oder ein 'try {} catch (Illuminate \ Database \ QueryException $ ex) {}' –

+0

Ich versuchte den Versuch zu fangen, aber es zeigt immer noch den Fehler. Zum Beispiel: try { $ results = DB :: Verbindung ('myDB') -> wählen ('BAD TEXT QUERY SOLLTE FEHLER'); } catch (Illuminate \ Database \ QueryException $ e) { // Tue nichts } – KingKongFrog

+1

'try {$ ergebnisse = \ DB :: connection (" beispiel ") -> select (\ DB :: raw ("SELECT * FROM unknown_table")) -> first(); } catch (\ Illuminate \ Database \ QueryException $ ex) {die ("Einen Fehler gefangen"); } 'Wirft und' stirbt' "Fing einen Fehler". Hattest du das \ vor Illuminate? Ich habe gerade gemerkt, dass ich das in meinem ersten Kommentar vergessen habe. Außerdem würden Sie '$ ex' die 'Exception'-Basisklasse erweitern, sodass Sie' $ exo> getMessage() 'aufrufen können, um den genauen Fehler zurückzugeben. –

Antwort

24

Der einfachste Weg, um alle sql Syntax oder Abfrage Fehler zu fangen ist eine Illuminate\Database\QueryException nach Bereitstellung Schließung auf Ihre Anfrage zu fangen:

try { 
    $results = \DB::connection("example") 
    ->select(\DB::raw("SELECT * FROM unknown_table")) 
    ->first(); 
    // Closures include ->first(), ->get(), ->pluck(), etc. 
} catch(\Illuminate\Database\QueryException $ex){ 
    dd($ex->getMessage()); 
    // Note any method of class PDOException can be called on $ex. 
} 

Wenn es irgendwelche Fehler vorhanden sind, wird das Programm die(var_dump(...)) was es braucht.

Hinweis: Für Namespacing müssen Sie zuerst \ eingeben, wenn die Klasse nicht als use-Anweisung enthalten ist.

auch als Referenz: Laravel 5.1 API - Query Exception

Verwandte Themen