Inicio » Blog » Laravel

22 agosto, 2021

Lazy load vs. Eager-loading

Esta publicación es para explicarte dos de las formas tiene Laravel para cargar data y cual es la más idónea.

Suscríbete a nuestro canal en Youtube

Suscríbirse

Traer contenido de tu base de datos en tu proyecto en Laravel es muy sencillo, pero a veces tienes que replantearte si lo estás haciendo de la forma correcta, este post es para explicarte dos de las formas tiene Laravel para cargar data y cual es la más idónea.

¿Qué es lazy load o carga lenta?

Laravel nos ofrece dos formas de recuperar nuestra de data de la base de datos, la primera que veremos será la llamada lazy load o carga lenta, el nombre se refiere a que para recuperar los datos se hacen consultas sql a la base de datos, haciéndola lenta al momento de usarla.

Para explicar esto usaremos como ejemplo un proyecto API que tiene una ruta: /pacientes que, como imaginaran, nos mostrará el contenido de la tabla pacientes de la base de datos, pero en formato Json; dicha ruta tiene una relación de uno a muchos con el modelo tratamientos, la idea es obtener un Json en que se vean a los pacientes con sus respectivos tratamientos, observen o que pasa cuando invoco a la ruta:

carga-lenta

Como ven en la imagen, tenemos un Json que tiene ya los pacientes con sus respectivos tratamientos, pero el detalle de eso está en el que nosotros no mandamos a llamar a los tratamientos dentro de la sección de pacientes, sino que los cargamos aparte en una sección propiamente para tratamientos; pero entonces ¿Cómo se cargaron los pacientes en el array? Bueno estimados lectores, esto es algo completamente normal, y se llama: "Lazy load” y es una forma que tiene Laravel de recuperar nuestra data, la carga perezosa/carga lenta o lazy load hace que se carguen los registros de la relación cuando se acceden a la misma. 

En nuestro ejemplo accedimos a la relación cuando hicimos el llamado al método de tratamientos (en la línea 12 justo cuando a cada $value paciente se le carga su tratamiento) y fue en ese momento en el que se cargó toda la data de tratamientos a la variable de todos los pacientes, además de también guardarse en el array de todos los tratamientos.

Esto como se imaginaran los aliviana el trabajo haciendo que el array de tratamientos sea innecesario y solo necesitamos el foreach para cargar cada tratamiento de cada paciente, sin necesidad de almacenarlos en una variable. Pero hay que hacer una aclaración, la carga lenta es pesada, porque hace muchas consultas a la base de datos como ya explicamos; por lo que si quiero la data seteada a mi gusto, es decir cada paciente con su tratamiento, ¿cómo hago para no recurrir al bucle?

¿Qué es Eager-loading o carga ansiosa?

La respuesta que nos da Laravel es aplicar la carga ansiosa, que nos va ayudar a reducir nuestro código aún más. Pasa que si bien la Lazy louding carga la data al momento es mejor que toda la data ya venga precargada desde el principio, y es justamente eso lo que hace la carga ansiosa; realiza una carga previa de los registros de las relaciones para evitar hacer tantas peticiones SQL. Si queremos usarla solo escribimos el método “with” y le pasas como parámetro la relación o relaciones que deseemos, convirtiéndose así en la única línea que necesitaremos.

carga-ansiosa
 


Leido 2738 veces

Compartir link del tutorial con tus amigos


Aprende más sobre Laravel

Cursos de programación

Codea Codea App

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú

© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023