Как уловить исключение запроса в laravel, чтобы узнать, не сработает ли он?

Все, что я пытаюсь сделать, это проверить запрос.

'SELECT * from table_that_does_not_exist'

Без этой ошибки я бы хотел знать, что это не удалось, поэтому я могу вернуть ответ, в котором говорится: "Ошибка: таблица не существует" или общая ошибка.

Ответ 1

Самый простой способ поймать любой синтаксис sql или ошибки запроса - это поймать Illuminate\Database\QueryException после обеспечения закрытия вашего запроса:

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.
}

Если есть какие-либо ошибки, программа будет die(var_dump(...)) независимо от того, что ей нужно.

Примечание. Для пространства имен вам нужно сначала \, если класс не включен в качестве оператора use.

Также для справки: API Laravel 5.1 - Исключение запроса

Ответ 2

Если вы хотите перехватывать все типы исключений базы данных, вы можете перехватить их в laravel Exception Handler

if ($exception instanceof \PDOException) {
    # render a custom error
}

Ответ 3

Оберните строки кода, которые вы хотите поймать исключение при использовании операторов try-catch

try
{
//write your codes here
}
catch(Exception $e)
{
   dd($e->getMessage());
}

Не забудьте включить класс Exception вверху вашего контроллера, сказав

Use Exception;