11 Módulo de Doctores CRUD Completo Migración, Modelo, Relaciones, Rutas, Controladores y Vistas

Duración: 18 min
Módulo: Módulo de Doctores & Cuerpo Médico Lección 1 de 1

Descripció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ósitoComando Terminal / ArtisanRuta HTTP / Nombre de Ruta
Generación de Códigophp artisan make:model Doctor -mc --resourceN/A
Migración de Datosphp artisan migrateN/A
Listado de DoctoresN/AGET /admin/doctores (admin.doctores.index)
Formulario de RegistroN/AGET /admin/doctores/create (admin.doctores.create)
Almacenar DoctorN/APOST /admin/doctores (admin.doctores.store)
Detalle de DoctorN/AGET /admin/doctores/{doctor} (admin.doctores.show)
Formulario de EdiciónN/AGET /admin/doctores/{doctor}/edit (admin.doctores.edit)
Actualizar RegistroN/APUT/PATCH /admin/doctores/{doctor} (admin.doctores.update)
Eliminar RegistroN/ADELETE /admin/doctores/{doctor} (admin.doctores.destroy)

🔒 Buenas Prácticas y Seguridad

  1. 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.
  2. 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.
  3. 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.
  4. 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.