Saltar al contenido

Verificación de Laravel para violación de restricciones

Si encuentras algún problema con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.

Solución:

estas buscando el 23000 Error code (Integrity Constraint Violation). Si le echas un vistazo QueryException clase, se extiende desde PDOExceptionpara que puedas acceder a $errorInfo variable.

Para detectar este error, puede intentar:

try 
  // ...

 catch (IlluminateDatabaseQueryException $e) 
    var_dump($e->errorInfo);


// Example output from MySQL
array (size=3)
   0 => string '23000' (length=5)
   1 => int 1452
   2 => string 'Cannot add or update a child row: a foreign key constraint fails (...)'

Para ser más específicos (entrada duplicada, no nullagregar/actualizar fila secundaria, eliminar fila principal…), depende de cada SGBD:

  • PostgreSQL y el servidor SQL siguen las convenciones del estándar SQL para SQLSTATE código, por lo que puede devolver el primer valor de la array $e->errorInfo[0] o llamar $e->getCode() directamente
  • MySQL, MariaDB y SQLite no obedecen estrictamente las reglas, por lo que debe devolver el segundo valor del array $e->errorInfo[1]

Para laravel, el manejo de errores es fácil, simplemente agregue este código en su archivo “app/start/global.php” (o cree un proveedor de servicios):

App::error(function(IlluminateDatabaseQueryException $exception)

    $error = $exception->errorInfo;
    // add your business logic
);

primero pon esto en tu controlador

use Exception;

en segundo lugar, maneje el error usando Try Catch como este ejemplo

try    //here trying to update email and phone in db which are unique values
        DB::table('users')
            ->where('role_id',1)
            ->update($edit);
        return redirect("admin/update_profile")
               ->with('update','update');
            catch(Exception $e)
             //if email or phone exist before in db redirect with error messages
                return redirect()->back()->with('phone_email','phone_email_exist before');
            

Nuevas actualizaciones aquí sin necesidad de usar trata de atraparlo puede hacerlo fácilmente en las reglas de validación como el siguiente código explotó

public function update(Request $request, $id)
unique:users,id,'.$id,
            'email'                      => 'required

donde la identificación está relacionada con el registro que edita.

También puedes intentar

try 
       ...
     catch ( Exception $e) 
         var_dump($e->errorInfo );
    

luego busque el código de error.

Esto atrapa todas las excepciones, incluida QueryException

valoraciones y comentarios

Eres capaz de añadir valor a nuestra información tributando tu experiencia en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *