Hola a todos, ¿cómo están? Bienvenidos de nuevo al curso intermedio de Laravel. En la lección de hoy, veremos transacciones en Laravel, Entiéndase que una transacciones en términos de informática es una interacción con una estructura de datos compleja, compuesta por varios procesos que se aplican secuencialmente para mantener la integridad de la información.
¡Comencemos!
Concepto de transacciones en Laravel
En Laravel, las transacciones se refieren a un conjunto de operaciones de base de datos que se ejecutan como una única unidad. Esto significa que cuando se realizan múltiples operaciones dentro de una transacción de inserción o actualización de datos se completan con éxito todas o si una falla en el camino ninguna de ellas tiene efecto en la base de datos.
Cuando trabajas con bases de datos, es posible que necesites realizar varias operaciones de base de datos como parte de una tarea más grande. Utilizar transacciones nos proporciona secuencias de trabajo fiables ante posibles errores de operación para garantizar la integridad y consistencia de la base de datos. Si una de las operaciones dentro de la transacción falla, se revierten todas las operaciones anteriores, manteniendo la consistencia de la base de datos.
Contexto de transacciones en Laravel
Entrando en contexto, por ejemplo, en el método “store” de nuestro controlador “CursoController”. En primer lugar, se llevan a cabo las validaciones de los datos de entrada. Posteriormente, se recuperan los datos del formulario “cursos” y se almacenan en la base de datos. Finalmente, se itera mediante un bucle ‘foreach’, registrando las relaciones existentes entre el curso y los alumnos en la tabla pivot.
Si por alguna razón al momento de procesar las consultas de inserción en la tabla pivot de nuestra base de datos falla, los datos ya insertados hasta ese punto en las tablas “curso” y “alumno_curso” permanecen causando inconsistencia de los datos y generando posibles errores en la aplicación.
Para evitar estos problemas Laravel cuenta con las transacciones que controlan el flujo de operaciones de consultas a la base de datos. En caso de error, se realiza un rollback (retroceso) de todas las operaciones ejecutadas hasta ese momento, y se lanza una excepción que podemos manejar.
Crear transacciones en Laravel
En nuestra aplicación, estableceremos una transacción en el controlador “CursoController. En primer lugar, haremos referencia a la clase “Facades\DB”.
use Illuminate\Support\Facades\DB;
En el método “store”, después de las validaciones del formulario, iniciamos la transacción con “DB::beginTransaction”, para iniciar una transacción de base de datos (Una transacción puede tener un conjunto de operaciones que se ejecutan como una sola unidad).
Ahora iniciamos un try-catch que nos permitirá lanzar excepciones de las transacciones en caso de error. Todo el código de las consultas eloquent lo pasamos dentro de la sentencia “try”. Seguidamente el código del método “DB::commit” que nos permite confirmar que todos las consultas realizadas a nuestra base de datos fueron realizadas con éxito.
Dentro de la sentencia “catch” introducimos el código “DB::rollBack” que en caso que se presente algún error lanza la excepción y borre todos los cambios realizados de las consultas, volviendo al estado anterior antes de iniciar el proceso. Seguidamente, retornamos a la vista un mensaje de error.
DB::beginTransaction(); try { $curso = new Curso($request->all()); $curso->save(); foreach ($request->alumno_ids as $alumno_id){ $curso->alumnos()->attach($alumno_id); } DB::commit(); } catch (\Exception $e){ DB::rollBack(); return "Error de insercción de datos" . $e->getMessage(); } return redirect()->action([CursoController::class, 'index']);
Recuerda que puedes descargar el código fuente de esta clase y todas las demás clases en el repositorio de GitHub totalmente gratis.
Hasta aquí la clase de hoy, si tienes alguna consulta puedes dejarnos un comentario o si quieres saber más acerca de este tema puedes visitar el sitio oficial de Laravel. En la siguiente clase empezaremos con los reportes en Laravel.
Saludos y éxitos.

Victor Peña
Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.
Pingback: Inyección de dependencias en Laravel - Norvic Software