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 PDOException
para 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.