14 Módulo especialidades para Doctores: Migración, Modelo, Relación, Rutas, Controladores y Vistas

Duración: 23 min
Módulo: Especialidades & Tratamientos Odontológicos Lección 1 de 3

Descripción

🎓 Lección 14: Módulo de Especialidades Médicas (CRUD Completo y Normalización en Laravel)

Objetivo General: Normalizar la estructura de datos del sistema odontológico reemplazando los campos de texto libre por una entidad referencial de especialidades, implementando su respectivo esquema de base de datos, relaciones Eloquent, controlador con modales interactivos y actualización dinámica en el módulo de doctores.

🚀 Pasos Clave con Timestamps

  • ⏱️ 00:00 — Problemática de la Información Libres: Identificación de inconsistencias al registrar especialidades como texto plano (mayúsculas, minúsculas, tildes y duplicados) y la necesidad de estandarizarlas.
  • ⏱️ 02:20 — Modelado Entidad-Relación: Rediseño del diagrama ER agregando la tabla especialidades y migrando especialidad en doctores hacia una clave foránea especialidad_id.
  • ⏱️ 04:00 — Generación de Artefactos Laravel: Creación del modelo, migración y controlador mediante el comando php artisan make:model Especialidad -mc --resource.
  • ⏱️ 05:25 — Orden de Ejecución de Migraciones: Reorganización del timestamp en el archivo de migración para asegurar que la tabla especialidades exista previa a la declaración de su clave foránea en doctores.
  • ⏱️ 07:15 — Restablecimiento de Base de Datos: Ejecución de php artisan migrate:fresh --seed para aplicar la nueva estructura y verificar las relaciones en el diseñador.
  • ⏱️ 08:35 — Definición de Rutas y Navegación: Configuración de endpoints optimizados para modales y adición del ítem Especialidades en la barra lateral del panel administrativo (tabler.php).
  • ⏱️ 11:45 — Configuración Eloquent & Relaciones: Definición de la propiedad $fillable y establecimiento de relaciones belongsTo / hasMany entre Doctor y Especialidad.
  • ⏱️ 14:10 — Controlador y Reglas de Validación: Implementación de los métodos store, update y destroy en EspecialidadController, forzando la conversión del campo a mayúsculas (Str::upper).
  • ⏱️ 17:55 — Poblamiento de Datos con Seeders y Factories: Configuración de EspecialidadFactory y actualización de DoctorFactory para relacionar dinámicamente registros aleatorios.
  • ⏱️ 20:50 — Verificación Funcional del CRUD: Prueba completa del flujo (creación, edición de estados activo/inactivo, eliminación) e integración de un <select> en el formulario del Doctor.

🛠️ Comandos y Rutas Principales

Tipo / CapaComando / RutaPropósito
Terminal / Artisanphp artisan make:model Especialidad -mc --resourceGenera el modelo Especialidad, su migración y su controlador con métodos CRUD.
Terminal / Artisanphp artisan make:factory EspecialidadFactoryCrea la fábrica de datos de prueba para poblar la tabla especialidades.
Terminal / Artisanphp artisan migrate:fresh --seedReconstruye la base de datos y ejecuta los seeders en el orden correcto.
Ruta HTTP (GET)/admin/especialidadesRenderiza el listado principal con paginación y modales integrados (index).
Ruta HTTP (POST)/admin/especialidadesProcesa y valida el registro de una nueva especialidad (store).
Ruta HTTP (PUT/PATCH)/admin/especialidades/{id}Actualiza la información o estado de una especialidad existente (update).
Ruta HTTP (DELETE)/admin/especialidades/{id}Elimina de forma lógica o física un registro de especialidad (destroy).

🔒 Buenas Prácticas y Seguridad

  1. Restricción de Claves Foráneas y Orden de Migraciones: Asegurar siempre que la tabla principal (especialidades) sea creada antes que las tablas dependientes (doctores) modificando la marca de tiempo del archivo de migración o usando métodos diferidos para evitar fallos de referencia.
  2. Estandarización y Normalización de Entrada: Formatear las cadenas críticas a mayúsculas (Str::upper()) al persistir en la base de datos para garantizar consistencia en reportes y búsquedas.
  3. Validación Unificada de Integridad: Aplicar reglas exists:especialidades,id en los controladores dependientes (como DoctorController) para prevenir referencias a registros inexistentes o eliminados.
  4. UX Ágil mediante Modales: Implementar interfaces basadas en modales para entidades simples (de pocos atributos) con el fin de evitar recargas innecesarias y agilizar la gestión administrativa.