web-dev-qa-db-fra.com

Laravel rattraper l'erreur de champ "Unique" Eloquent

J'essaie d'identifier lors de l'insertion d'un enregistrement en utilisant éloquent dans Laravel lorsqu'il génère une exception en raison d'une erreur de champ unique.

Le code que j'ai jusqu'ici est:

try {

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

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

Cela jette une exception OK Je ne sais pas quoi faire pour l'identifier comme une erreur de duplication de colonne?

Merci,

Gavin.

16
Gavin

Je suppose que vous utilisez MySQL, c'est probablement différent pour les autres systèmes

D'accord, le code d'erreur pour l'entrée en double est 1062 . Et voici comment vous récupérez le code d'erreur de l'exception:

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

ajoute ce code dans la classe Handler (exception)

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);
0
Amirouche Zeggagh