11 Como programar el CRUD Completo de Turnos de forma segura con registros relacionados en Laravel

Duración: 15 min
Módulo: Reglas de Negocio: Módulos de Turnos y Ausencias Lección 1 de 2

Descripción

🔍 Lección 11: Cómo Programar el CRUD Completo de Turnos con Registros Relacionados en Laravel 🚀

En esta lección creamos el módulo de Turnos Laborales (TurnoController.php), construyendo su CRUD completo e integrando la relación con el modelo de Categorías. Además, preparamos las propiedades visuales (color de fondo y color de texto) que permitirán la visualización e interacción de los turnos en un calendario dinámico en futuros capítulos.

🎯 Lo realizado en este capítulo

  • 🛣️ Rutas Web y Navegación:
    • Se agregaron en routes/web.php las rutas necesarias para el módulo: index, create, store, edit, update y destroy.
    • Se integró el nuevo enlace de navegación en el menú principal que direcciona a turnos.index.
  • 🔄 Consulta de Relaciones Eficiente (Eager Loading):
    • En TurnoController@index, se utilizó la carga ansiosa Turno::with('categoria')->get() para traer los registros de los turnos junto con la información de su categoría relacionada, optimizando las consultas SQL a la base de datos.
  • 📝 Creación e Inserción Masiva (create y store):
    • Poblado de Selección: El método create() recupera las categorías disponibles para desplegarlas dentro de un campo desplegable (select) en el formulario.
    • Validación y Asignación Masiva: En el método store(), se aplican reglas de validación (category_id requerido y existente en la tabla categorias, nombre, hora de inicio y fin) y se implementa la inserción masiva utilizando $fillable en el modelo Turno.
  • 🎨 Gestión de Interfaz e Inputs de Color (edit y update):
    • Se habilitaron selectores de color <input type="color"> en el formulario para definir el color_fondo y color_texto de cada turno (claves para la posterior integración con FullCalendar).
    • En el método update(), se consulta el registro mediante su ID, se validan las entradas y se ejecuta el método $turno->update($request->all()).
  • 🗑️ Eliminación Directa (destroy):
    • Se configuró la acción de borrado capturando el ID desde el formulario con el método @method('DELETE'), eliminando la fila correspondiente de la base de datos y retornando una notificación al listado principal.

🗄️ Próximo paso

Con los módulos esenciales listos (Usuarios, Empleados, Categorías, Sucursales y Turnos), el siguiente paso principal en la arquitectura de la base de datos será abordar el módulo de Cronogramas, donde asignaremos estos turnos a los empleados vinculando toda la información mediante la librería FullCalendar.