Laravel улавливает "уникальную" ошибку поля

Я пытаюсь определить при вставке записи с использованием красноречия в Laravel, когда он генерирует исключение из-за уникальной ошибки поля.

Код, который у меня есть до сих пор:

try {

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

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

Он выдает исключение. ОК. Я просто не знаю, что делать, чтобы идентифицировать его как дублируемую ошибку столбца.

Спасибо,

Гэвин.

Ответ 1

Я предполагаю, что вы используете MySQL, он, вероятно, отличается для других систем

Хорошо, сначала код ошибки для повторяющейся записи - 1062. И вот как вы извлекаете код ошибки из исключения:

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

Ответ 2

добавить этот код внутри класса Handler (исключение)

if($e instanceof QueryException){
        $errorCode = $e->errorInfo[1];          
        switch ($errorCode) {
            case 1062://code dublicate entry 
                return response([
                    'errors'=>'Duplicate Entry'
                ],Response::HTTP_NOT_FOUND);    
                break;
            case 1364:// you can handel any auther error
                return response([
                    'errors'=>$e->getMessage()
                ],Response::HTTP_NOT_FOUND);                        
                break;      
        }
     }
    ...
    return parent::render($request, $exception);