【Laravel】MySQLエラー時にエラーコードとSQLSTATEを取得する

えび

Laravelプロジェクトにて、ログの吐き出しやエラーメッセージの表示の際にエラーコードたちが必要だったのでメモ

まずはtry~catch

MySQLのエラーを捕まえるためにtry~catchで囲ってあげる
ここで使用するExceptionはQueryException

use Illuminate\Database\QueryException;

try {
  // DB処理
} catch (QueryException $e) {
  // dd ($e);
}

試しにエラーを起こしてみる

デバッグするためにエラー起こしてみる
ここでは、適当なユーザーの存在しないカラム (emailXXX) を更新しようとしてる

try {
  $user = auth()->user();
  $user->update([
    'emailXXX' => 'test@test.com'
  ]);
} catch (QueryException $e) {
  dd ($e);
}

dd()で吐き出された内容 ↓

どうやら、$e->codeにはSQLSTATEが格納されていて、
エラーコードerrorInfo[1]に格納されているみたい

SQLSTATEerrorInfo[0]で取得できるのでまとめて配列から取得してあげればOK

use Illuminate\Database\QueryException;

try {
  // DB処理
} catch (QueryException $e) {
  dd($e->errorInfo[0]); // SQLSTATE
  dd($e->errorInfo[1]); // エラーコード
}