En Eloquent, el ORM de Laravel, solemos recurrir a métodos como with()
para cargar relaciones y a whereHas()
para filtrar registros en base a las relaciones. Sin embargo, a partir de Laravel 9.17, se presentó el método withWhereHas
, que fusiona ambas acciones: carga la relación y, al mismo tiempo, aplica filtros a dicha relación.
De este modo, en lugar de escribir algo como:
Se puede simplificar a:
Con este método, obtendrás directamente todos los usuarios que tengan publicaciones marcadas como featured = true
, y, a su vez, Eloquent hará la carga de esos posts.
Muchas veces no necesitamos todas las columnas de la tabla relacionada. Podemos optimizar la carga de datos especificando las columnas deseadas. Por ejemplo:
En este caso:
Se cargan únicamente las columnas id
, title
y category_id
de la tabla de posts
.
Eloquent ignora las demás columnas, lo cual ayuda a optimizar las consultas.
Método | Ventajas | Desventajas |
---|---|---|
with() + whereHas() | - Claridad al separar la lógica de filtrado ( | - Dos llamadas separadas que podrían alargarse en casos complejos. |
withWhereHas() | - Combina la filtración y la carga en un solo método. | - Solo disponible a partir de Laravel 9.17. |
withWhereHas
aporta simplicidad y un código más fluido, pero en versiones anteriores a Laravel 9.17, la alternativa es combinar whereHas()
y with()
por separado.
El método withWhereHas
facilita filtrar y cargar relaciones en una sola línea de código, haciéndolo ideal para mejorar la legibilidad y reducir la complejidad en consultas de Eloquent. Además, recuerda que puedes optimizar tu carga especificando solo las columnas necesarias mediante la notación de selección, asegurando que tu aplicación cargue datos de la forma más eficiente posible.
Si tu proyecto está en Laravel 9.17 (o superior) y quieres un código más limpio y conciso, withWhereHas
es la mejor opción para filtrar y cargar relaciones simultáneamente.
¡Explora este método en tus proyectos y verás la diferencia en tu flujo de trabajo con Eloquent!
¡Comparte esta entrada con tus colegas y no olvides explorar la Ruta de Aprendizaje Laravel 11!
Cursosdesarrolloweb es una plataforma educativa con cursos y tutoriales en texto y vídeo.
Términos y condiciones Política de privacidad Términos y condiciones para afiliados Formulario de contacto
Copyright 2025 © Todos los derechos reservados.