En la clase anterior aprendimos a usar el modelo Project para traer datos de la tabla projects de una manera bastante simple, ahora imagina que esta tabla creció en registros y ahora se tarda mucho tiempo trayendo, por ejemplo, 900 registros, el rendimiento de la aplicación baja, se puede morir el servidor y ya no logramos tener todos los datos.
Para evitar este problema tenemos un comando que nos va a traer los registros por secciones, este es chunk, al cual le pediremos un bloque menor de registros y fragmentará la cantidad de valores hasta tenerlos todos.
Esto lo logramos implementando un Closure que procesará los datos en los bloques que van llegando.
Project::chunk(200,function($projects){foreach($projectsas$project){//Aquí escribimos lo que haremos con los datos (operar, modificar, etc)}});
Esto lo podemos leer de la siguiente manera:
Traer del modelo Project (que traduce a la tabla projects) bloques de 200 registros y guardarlos temporalmente en la variable $projects como un array, luego recorre este array con los 200 registros y por cada uno ejecuta lo que está dentro del foreach, repite esta acción hasta que lleguen todos los registros de Project.
En la siguiente imagen puedes ver cómo tenemos un gran lote de datos y van cayendo microlotes más pequeños que se procesan y finalmente llegan a su destino final, todo este proceso se ejecuta de manera cíclica hasta que se procesan todos los datos.
De esta manera, estamos salvando el rendimiento y la memoria de nuestra aplicación cuando necesitemos operar con grandes cantidades de información desde la base de datos.