Mostrar cursos relacionados por categoría es una funcionalidad que aporta dinamismo real a cualquier plataforma educativa. En lugar de listar simplemente los últimos cursos publicados, filtrar por la misma categoría del curso que el usuario está visualizando mejora la experiencia y la relevancia del contenido. Aquí se explica cómo lograrlo con un método personalizado dentro del modelo de Eloquent.
¿Cómo se estructura la vista para cursos similares?
El punto de partida es la página individual de un curso. Debajo de toda la información principal —lecciones, datos del usuario, contenido del curso— se reserva un espacio específico para mostrar los cursos similares [01:07]. Este bloque se ubica dentro de un div que ocupa dos columnas en la cuadrícula, con separación y margen superior e inferior configurados mediante clases utilitarias.
html
<div class="grid grid-cols-2 gap-4 my-8">
<!-- Aquí se renderizan los cursos similares -->
</div>
De momento, el contenido visual de cada tarjeta de curso se copia y pega desde otro componente existente. En una clase posterior, este fragmento se extraerá a un componente reutilizable para evitar duplicación de código [02:17].
¿Qué es un método personalizado en el modelo y cómo se crea?
Para obtener cursos de la misma categoría, se crea un método personalizado llamado similar directamente en el modelo de cursos [02:43]. Este enfoque es distinto a una relación Eloquent tradicional: no define una asociación permanente entre tablas, sino que ejecuta una consulta específica bajo demanda.
¿Cómo funciona la consulta por categoría?
Dentro del modelo, ubicado en app/Models, se añade el método con la siguiente lógica [03:15]:
php
public function similar()
{
return Course::where('category_id', $this->category_id)
->with('user')
->take(2)
->get();
}
where('category_id', $this->category_id): filtra los cursos cuya categoría coincida con la del curso actual.
with('user'): carga la relación con el usuario (eager loading) para evitar consultas adicionales.
take(2): limita el resultado a solo dos cursos.
get(): ejecuta la consulta y devuelve la colección.
El uso de $this->category_id es clave: hace referencia al category_id del curso que se está visualizando en ese momento, lo que garantiza que los resultados siempre sean relevantes [03:28].
¿Cómo se invoca desde la vista?
Desde la vista o el controlador, se accede al método como si fuera una propiedad más del modelo:
php
$course->similar()
Antes de crear el método, Laravel lanza un error indicando que "similar" es un método indefinido dentro de la entidad de cursos [02:55]. Este error es esperado y se resuelve al definir el método público en el modelo.
¿Por qué es importante diferenciar cursos similares de últimos cursos?
La página muestra dos bloques distintos que cumplen funciones diferentes:
- Cursos similares: filtrados por la misma categoría del curso actual, cambian según el curso que se visualiza [04:30].
- Últimos cursos: listados en orden cronológico, pueden pertenecer a cualquier categoría.
Al hacer clic en otro curso, los cursos similares se actualizan automáticamente según la nueva categoría, mientras que los últimos cursos mantienen su orden temporal [04:45]. Esta diferenciación aporta contexto y facilita que el usuario encuentre contenido relacionado.
A lo largo del proyecto se han implementado distintos patrones dentro de los modelos: relaciones con usuario, relaciones con posts, campos virtuales y ahora un método personalizado [03:05]. Cada uno responde a una necesidad concreta, y reconocer cuándo usar cada tipo es fundamental para construir aplicaciones escalables con poco código y resultados profesionales.