86 Reversión de Pagos y Abonos: Lógica de Anulación y Reapertura de Préstamos en Laravel 12 🔄🛠️
Duración: 16 minDescripción
🛡️ Lección 86: Integridad Referencial y Borrado en Cascada
En esta sesión, nos enfocamos en la robustez de la base de datos. El objetivo es evitar "datos huérfanos" (registros de abonos que se quedan en la base de datos después de borrar un pago o un préstamo).
1. Configuración de la Migración (On Delete Cascade)
Para asegurar que la base de datos se limpie automáticamente, revisamos la migración de pagos_parciales:
- 🔗 Relación de Llave Foránea: Ajustamos la definición del campo pago_id para incluir el método onDelete('cascade').
- ⚙️ Funcionamiento: Esto garantiza que, si por algún motivo se elimina una cuota (registro en pagos), el motor de la base de datos (MySQL/MariaDB) elimine instantáneamente todos los abonos relacionados en pagos_parciales.
2. Lógica en el Controlador (Destroy Method)
Reforzamos el método destroy en el controlador de préstamos o pagos:
- 🛡️ Validación de Eliminación: Antes de borrar, el sistema verifica si existen registros vinculados.
- 🧹 Limpieza Manual vs. Automática: Aunque el borrado en cascada a nivel de DB es eficiente, en Laravel también podemos manejarlo mediante Model Observers o el método booting del modelo para realizar limpiezas adicionales si fuera necesario.
3. Pruebas de Integridad
Realizamos pruebas de "estrés" en el Dashboard:
- 🧪 Escenario A: Eliminamos un pago que tiene 3 abonos parciales y verificamos que la tabla de pagos_parciales se limpie correctamente.
- 🧪 Escenario B: Eliminamos un préstamo completo y validamos que todas las cuotas y sus respectivos abonos desaparezcan, manteniendo la base de datos optimizada y sin basura digital.
🚀 Próximo Paso: Con la lógica de pagos y abonos blindada, el sistema está listo para pasar al módulo de Reportes Generales y Estadísticas del Dashboard.
Si tienes alguna duda específica sobre el código de esta lección o necesitas que revise una parte del controlador, ¡házmelo saber!
Lecciones
Apoya este proyecto
Si te gusta nuestro contenido, ¡apóyanos con una donación!
Donar por Airtm Donar por Binance¡Gracias por tu apoyo! ❤️