En este tip de Laravel vamos a ver la mejor forma de obtener la cantidad de registros relacionados con Eloquent y withCount(). Sabemos que Eloquent tiene una gran cantidad de funciones que nos permite realizar consultas SQL de una forma muy sencilla y amigable.
Vamos a ejemplos de como utilizar la función withCount(), es un método de Eloquent no tan conocido pero es realmente útil. Se puede utilizar con relaciones hasMany() o con relaciones hasManyThrough().
Para nuestros ejemplos vamos a suponer que tenemos un modelo User, que se relaciona con un modelo Post
y a su vez con un modelo Comment
.
Si necesitamos mostrar todos los usuarios con la cantidad de publicaciones y comentarios de esta forma:
¿Cómo lo harías? Puede que hayas pensado en hacerlo de la siguiente forma:
Pero no sería la forma mas optima de hacerlo ya que estaríamos ejecutando una consulta a la base de datos por cada interacción para obtener la cantidad de publicaciones y comentarios.
Es por eso que Eloquent nos brinda una mejor forma de hacerlo y es utilizando el método withCount().
Los parámetros en el método withCount()
son el nombre de las relacionadas definidas en el modelo User
. Y para acceder a la cantidad de registros, se debe agregar _count al nombre de los parámetros. Por lo tanto, para obtener la cantidad de publicaciones hacemos posts_count y para los comentarios, comments_count. Nuestro archivo Blade quedaría de la siguiente forma:
Y como podemos ver, solo se ejecuta una consulta a la base de datos, optimizando mucho mas el proceso.
Aplicar filtros con withCount en Eloquent
Si te gusto lo que puede hacer withCount, te comento que eso no es todo. Este maravilloso método de Eloquent nos permite agregar filtros. Vamos a ver un ejemplo de como aplicar filtros en las relaciones con withCount.
Supongamos que solo queremos la cantidad de comentarios aprobados, por lo tanto deberíamos hacer lo siguiente.
Y en Blade mostramos las cantidades de comentarios aprobados con $user->authorized_comments_count. Y nuestra tabla quedaría de la siguiente forma.
Versión disponible en Laravel
Para utilizar el método withCount() de Eloquent debemos tener la versión de Laravel 5.2 en adelante.
Conclusión
Como vimos, withCount() es un método de Eloquent muy útil que nos permite obtener las cantidades de nuestros modelos relacionados en una consulta optimizada. Espero que les haya gustado este Laravel tip y si fue así, compártelo en tus redes sociales. 👋😀
jhwsytr
Esos filtros me van a ayudar bastante gracias por compartir 🙂
Buen tip!!!
Fe de errata: en la captura aparece approved_comments_count
mientras en el texto del articulo haces referencia a authorized_comments_count para Blade
Pero vamos, que se entiende 😉
Un abrazo!
Uuh muchas gracias Javier! Lo voy a estar corrigiendo. Saludos.
Te fuiste pa mi lista de marcadores, esta muy bien explicado el asunto, me solucionaste lo que estaba haciendo con ciclos y arrays para pasar las variables a blade y recorrerlas jajajajaja
Muchas gracias David!! Espero que sigas volviendo :D.
muchas gracias hermano