11 Módulo de Doctores CRUD Completo Migración, Modelo, Relaciones, Rutas, Controladores y Vistas
Duración: 18 minDescripción
🎓 Lección 11: Módulo de Doctores (CRUD Completo en Laravel & Tabler UI)
Objetivo General: Desarrollar e integrar el módulo completo de Doctores en un sistema de gestión odontológica utilizando Laravel. Se abarcará la definición arquitectónica en la base de datos (migración y relaciones Eloquent), rutas HTTP protegidas, controladores con lógica transaccional para carga de imágenes y el renderizado de vistas dinámicas bajo Tabler UI.
🚀 Pasos Clave con Timestamps
- ⏱️ 00:00 📌 Introducción y Estructura del Módulo: Contextualización del capítulo 11 en el desarrollo del sistema clínico odontológico y resumen de la arquitectura a implementar para el módulo de doctores.
- ⏱️ 01:41 📐 Modelado de Base de Datos y Diagrama ER: Definición del esquema Entidad-Relación (diagram.dbml), especificando la relación 1:1 entre usuarios y doctores junto a sus atributos (especialidad, colegiatura, observación, foto).
- ⏱️ 03:24 🛠️ Generación de Modelo, Migración y Controlador: Uso de Artisan para la creación en bloque del modelo Doctor, la tabla de migración y el controlador de recursos (--resource).
- ⏱️ 04:06 💾 Configuración de Migraciones y Ejecución: Definición de campos, restricciones (unique, nullable) y claves foráneas (user_id), seguida de la ejecución del comando php artisan migrate.
- ⏱️ 05:32 🔗 Configuración de Relaciones Eloquent: Definición de asignación masiva ($fillable) y relaciones de modelo (belongsTo en Doctor y hasOne en User).
- ⏱️ 07:00 🌐 Definición de Rutas y Menú de Navegación: Declaración del grupo de rutas administrativas protegidas por middleware y actualización del menú lateral en config/tabler.php.
- ⏱️ 09:16 🎨 Creación de Estructura de Vistas Blade: Maquetación de los 4 archivos Blade esenciales (index, create, show, edit) integrados con Tabler UI.
- ⏱️ 12:03 🧠 Lógica de Negocio en el Controlador (DoctorController): Implementación de validaciones de entrada, persistencia en cascada (Usuario -> Asignación de Rol -> Doctor) y gestión de almacenamiento de fotografías.
- ⏱️ 13:59 🧪 Pruebas de Registro, Edición y Limpieza en Cascada: Verificación del flujo CRUD en la interfaz de usuario y comprobación de eliminación sincronizada en base de datos y sistema de archivos (storage/app/public/doctores).
🛠️ Comandos y Rutas Principales
| Tipo / Propósito | Comando Terminal / Artisan | Ruta HTTP / Nombre de Ruta |
|---|---|---|
| Generación de Código | php artisan make:model Doctor -mc --resource | N/A |
| Migración de Datos | php artisan migrate | N/A |
| Listado de Doctores | N/A | GET /admin/doctores (admin.doctores.index) |
| Formulario de Registro | N/A | GET /admin/doctores/create (admin.doctores.create) |
| Almacenar Doctor | N/A | POST /admin/doctores (admin.doctores.store) |
| Detalle de Doctor | N/A | GET /admin/doctores/{doctor} (admin.doctores.show) |
| Formulario de Edición | N/A | GET /admin/doctores/{doctor}/edit (admin.doctores.edit) |
| Actualizar Registro | N/A | PUT/PATCH /admin/doctores/{doctor} (admin.doctores.update) |
| Eliminar Registro | N/A | DELETE /admin/doctores/{doctor} (admin.doctores.destroy) |
🔒 Buenas Prácticas y Seguridad
- Gestión de Transacciones y Persistencia Multitabla: Al registrar un doctor se modifican tres entidades (users, model_has_roles y doctors). Es fundamental envolver este flujo dentro de un bloque DB::transaction() para prevenir inconsistencias en la base de datos si ocurre un error durante el proceso.
- Limpieza Automática de Archivos (Storage Cleanup): Al actualizar la fotografía o eliminar un registro del sistema, debe removerse el archivo físico almacenado en storage/app/public/doctores utilizando la fachada Storage::delete(). Esto evita la acumulación de archivos huérfanos.
- Validación Estricta de Entradas y Restricciones de Unicidad: Validar campos críticos como la colegiatura/número de registro y el correo electrónico mediante reglas unique en el Request de Laravel para prevenir duplicidad de identidades profesionales.
- Protección de Rutas mediante Middleware: Asegurar que todas las rutas del módulo estén agrupadas bajo middlewares de autenticación (auth) y autorización por roles/permisos (role:admin o permisos Spatie) para restringir el acceso a usuarios no autorizados.