En esta lección te muestro la diferencia entre la carga perezosa y la carga ansiosa en Laravel.
Primeramente tenemos que saber que la carga perezosa y la carga ansiosa en Laravel son dos formas de obtener los registros de nuestra base de datos 🗃️ mediante las relaciones configuradas en los modelos.
Brevemente te puedo adelantar que la carga perezosa o lazy load significa que únicamente cargas los registros de la relación cuando accedes a ella.
Esto quiere decir que cada vez que llamemos a una relación como por ejemplo:
$user->articles
Suponiendo que cada usuario puede tener muchos artículos, en ese caso siempre se realizará una petición SQL para poder obtener dichos artículos.
Si llamamos a dicha relación una vez, pues no habrá problema pero si la colocamos dentro de un foreach
para iterar sobre cada usuario, tendremos una petición por cada iteración.
Si tenemos 1000 registros (usuarios) se realizará 1000 peticiones a la base de datos al momento de llamar a la relación articulos
😲. Por tal motivo se le llama carga perezosa.
Para mejorar lo anterior descrito, Laravel nos ofrece otro tipo de carga llamada carga ansiosa la cual realiza una carga previa de los registros de las relaciones con el fin de evitar hacer tantas peticiones SQL 🤩.
Para hacer uso de la carga ansiosa y ahorrarnos peticiones SQL, simplemente hacemos uso del método with
pasándole como parámetro la relación o relaciones que deseemos.
Si seguimos el ejemplo de los usuarios y los artículos sería algo como esto:
$users = User::with('articles')->get();
Con lo anterior tendríamos todos los usuarios y cada uno de ellos ya contaría con su colección de artículos sin necesidad de hacer peticiones SQL adicionales al usar la variable $users
en alguna estructura de repetición.
Todo esto está mejor explicado en el siguiente video:
La documentación oficial sobre la carga perezosa y la carga ansiosa la puedes encontrar aquí:
- https://laravel.com/docs/8.x/eloquent-relationships#relationship-methods-vs-dynamic-properties
- https://laravel.com/docs/8.x/eloquent-relationships#eager-loading
Espero que haya sido de gran utilidad éste tip que podría pasar desapercibido. Sin más que escribir, me despido y hasta el próximo post 🖖.