Práctica: Controladores y Rutas con la tabla employees
Objetivo de la actividad

Ampliar el circuito MVC trabajando con la tabla employees creada en el Tema 4. Implementarás rutas y un controlador que devuelvan listados ordenados y filtrados, y mostrarás los datos en una vista Blade mediante una tabla HTML con columnas homogéneas.
Al finalizar, serás capaz de:
- Definir rutas que invocan métodos de un controlador.
- Devolver listados ordenados por diferentes criterios.
- Aplicar filtros sobre consultas de Eloquent.
- Presentar los datos en una vista con una tabla HTML clara y consistente.
Requisitos previos
-
Base de datos: acceso a la base
laravel. -
Tabla
employeescreada mediante migraciones (del Tema 4) con la siguiente estructura:
| Campo | Tipo | Restricciones |
|---|---|---|
emp_id |
integer |
Clave primaria, no autoincremental, no nulo |
emp_firstname |
string(100) |
No nulo |
emp_lastname |
string(100) |
No nulo |
emp_birth_date |
date |
No nulo |
emp_hire_date |
date |
No nulo |
salary |
float |
Puede ser nulo |
created_at |
timestamp |
Automático |
updated_at |
timestamp |
Automático |
-
Modelo
Employeeconfigurado y operativo (tabla, clave primaria, tipos y asignación masiva coherentes con la estructura anterior). -
Datos de prueba: Carga de datos de prueba: importa el anexo SQL.
info: "Importar datos de prueba"
Lo más rápido es utilizar alguna extensión para vsCode como "SQLTools" o "MySQL" para conectarte a la base de datos y ejecutar el script SQL que se proporciona al final de esta actividad.

Datos de prueba: En los recursos de esta actividad hay un fichero employees.sql con 100 empleados ficticios para importar en la tabla employees.
Instrucciones paso a paso
1. Crear el controlador EmployeeController
Crea un controlador para centralizar la lógica de consulta de empleados. Dentro de él implementarás, como mínimo, los métodos que devuelvan colecciones de empleados según los criterios indicados más abajo. Cada método debe:
- Obtener los empleados aplicando el criterio de ordenación o filtrado correspondiente.
- Enviar el resultado a una vista Blade común (ver punto 3) mediante una variable llamada exactamente
employees.
Métodos a implementar:
-
Listado por ID ascendente Nombre sugerido del método:
byId. Comportamiento: devuelve todos los empleados ordenados poremp_idde menor a mayor. -
Listado por apellidos y nombre Nombre sugerido del método:
byLastName. Comportamiento: devuelve todos los empleados ordenados poremp_lastname(ascendente) y, en caso de empate, poremp_firstname(ascendente). -
Subconjunto por letra inicial de apellido Nombre sugerido del método:
lastNameStartsWith. Comportamiento: devuelve solo los empleados cuyoemp_lastnameempiece por la letra “A”, ordenados poremp_lastnameyemp_firstname(ascendente). Nota: en este tema el valor “A” es fijo. Las rutas con parámetros dinámicos se verán más adelante. -
Subconjunto por año de nacimiento Nombre sugerido del método:
bornIn. Comportamiento: devuelve solo los empleados nacidos en el año 1980, ordenados poremp_lastnameyemp_firstname(ascendente). Nota: el año “1980” es fijo en esta práctica (los parámetros dinámicos se verán más adelante).
Todos los métodos devolverán la misma vista (ver punto 3) y no deben repetir lógica de presentación en el controlador.
2. Definir las rutas
Declara rutas GET que apunten a los métodos anteriores. Usa exactamente estas URL para homogeneizar correcciones:
| Ruta | Método del controlador | Descripción |
|---|---|---|
/employees/by-id |
byId |
Listado ordenado por emp_id ascendente. |
/employees/by-lastname |
byLastName |
Listado ordenado por apellidos y nombre. |
/employees/filter-letter |
lastNameStartsWith |
Subconjunto: apellidos que empiezan por “A”. |
/employees/filter-year |
bornIn |
Subconjunto: nacidos en el año 1990. |
Requisitos de las rutas:
- Todas deben retornar la misma vista con la variable
employees. - Usa nombres de ruta coherentes para cada una (por ejemplo,
employees.byId,employees.byLastName,employees.starts,employees.born).
3. Crear la vista employees/index.blade.php
Crea una vista única para los cuatro casos. Esta vista debe:
-
Mostrar un título claro del listado.
-
Si no hay registros en
employees, mostrar un mensaje: “No hay empleados que cumplan el criterio.” -
En caso contrario, presentar una tabla HTML con las siguientes columnas y en este orden exacto:
| Columna mostrada | Procede del campo |
|---|---|
| ID | emp_id |
| Apellidos | emp_lastname |
| Nombre | emp_firstname |
| Edad | calculada a partir de emp_birth_date |
| Fecha de contratación | emp_hire_date formateada en YYYY-MM-DD |
- Mostrar, sobre la tabla o como “caption”, el total de registros del listado.
Notas de presentación:
- La Edad debe calcularse a partir de la fecha de nacimiento. Puedes calcularla en el controlador o en la vista, pero debe mostrarse como número entero de años.
- La Fecha de contratación debe mostrarse en formato
YYYY-MM-DD. - Usa una tabla legible: cabecera con títulos, filas con celdas alineadas, y un estilo simple pero claro. No es necesario usar CSS avanzado.
Comprobaciones
Verifica manualmente que:
-
/employees/by-id Muestra todos los registros ordenados por ID ascendente y las 5 columnas requeridas.
-
/employees/by-lastname Muestra todos los registros ordenados por apellidos y, en empates, por nombre. Se ven las 5 columnas.
-
/employees/filter-letter Muestra solo apellidos que empiezan por A. Ordenación por apellidos y nombre.
-
/employees/filter-year Muestra únicamente los empleados nacidos en 1990. Ordenación por apellidos y nombre.
-
En todos los casos:
-
Se muestra el total de registros listados.
- Si no hay coincidencias, aparece el mensaje de “No hay empleados que cumplan el criterio.”
Entrega
Sube a la plataforma:
-
Capturas de pantalla de cada ruta funcionando:
-
/employees/by-id /employees/by-lastname/employees/filter-letter/employees/filter-year- Listado de rutas definido (solo nombres y URIs, sin código fuente).
- Descripción breve de cómo calculas la Edad y cómo formateas la Fecha de contratación (dos o tres líneas).
- Evidencia de datos cargados: captura del total de filas o vista parcial de la tabla
employeesen tu gestor de BD.
Rúbrica de evaluación
| Criterio | Descripción | Peso |
|---|---|---|
| Controlador creado | Implementa los métodos solicitados con la lógica de ordenación/filtrado. | 25 % |
| Rutas definidas | Las cuatro rutas existen y funcionan con las URLs indicadas. | 20 % |
| Ordenaciones correctas | Listado por ID y por apellidos/nombre cumplen el criterio. | 20 % |
| Subconjuntos correctos | Filtros por inicial “A” y por año 1990 devuelven resultados coherentes. | 20 % |
| Vista y presentación | Tabla con 5 columnas correctas, total visible y manejo de vacío adecuado. | 10 % |
| Claridad global | Entrega ordenada, capturas legibles y sin ambigüedades. | 5 % |
Total: 100 %