Qué son las colecciones
La claseIlluminate\Support\Collection es un envoltorio fluido para trabajar con arrays.
En lugar de invocar por separado las funciones nativas de arrays de PHP, permite transformar los datos de manera intuitiva encadenando métodos.
Las colecciones son inmutables. Cada método devuelve una nueva instancia sin modificar la colección original, de modo que puedes operar con seguridad sin perder los datos de partida.
Crear una colección
Helper collect()
Es la forma más habitual. Pasa un array y obtén una colección.
Collection::make()
Equivalente a collect(). Úsalo cuando prefieras un estilo tipo facade.
Collection::fromJson()
Crea una colección a partir de una cadena JSON. Útil para procesar respuestas de APIs externas.
Métodos más habituales
map: transformar cada elemento
Aplica una operación a cada elemento y devuelve una nueva colección con los valores transformados.
filter / reject: filtrar por condición
filter() conserva los elementos que cumplen la condición; reject() descarta los que la cumplen.
first / last: obtener un elemento
Devuelve el primer o el último elemento que cumple la condición.
pluck: extraer una clave concreta
Extrae únicamente un campo de arrays o modelos anidados.
groupBy: agrupar por una clave
sortBy / sortByDesc: ordenar
each: ejecutar código sobre cada elemento
Úsalo para operaciones con efectos secundarios (logs, envío de correos, etc.). No modifica la colección.
flatMap: mapear y aplanar un nivel
Convierte cada elemento en un array y aplana el conjunto a una sola dimensión.
reduce: agregar
Reduce toda la colección a un único valor.
reduceInto: agregar sobre un objeto
Se comporta como reduce, pero la callback no necesita devolver un valor. Es útil para modificar directamente un objeto existente.
&) en la callback.
chunk: dividir en trozos
Divide una colección grande en fragmentos del tamaño indicado. Es útil para procesamiento por lotes o para paginar en pantalla.
Encadenamiento de métodos
La verdadera potencia de las colecciones está en el encadenamiento. Puedes expresar transformaciones complejas de datos en una sola secuencia.Integración con Eloquent
Los resultados de las consultas de Eloquent siempre son instancias deIlluminate\Database\Eloquent\Collection.
Esta clase extiende la Collection base, así que todos los métodos vistos están disponibles.
Métodos propios de la colección de Eloquent
Eloquent\Collection añade métodos específicos.
Lazy Collections
Mientras que una colección normal carga en memoria todos los datos,LazyCollection aprovecha los generadores de PHP y procesa los elementos uno a uno.
Permite ahorrar memoria cuando trabajas con decenas de miles de registros.
Crear una LazyCollection
Procesamiento por lotes de grandes volúmenes
cursor() recupera los registros uno a uno de la base de datos, con lo que ahorra mucha memoria al procesar grandes cantidades. Ten en cuenta, sin embargo, que la conexión con la base de datos se mantiene activa hasta que finaliza el procesamiento.Paginado con take y skip
Resumen
Métodos más habituales
Métodos más habituales
Colecciones frente a funciones de array
Colecciones frente a funciones de array
Las colecciones aportan mucha más legibilidad que las funciones de array.
Colecciones normales frente a LazyCollection
Colecciones normales frente a LazyCollection
- Colección normal: datos del orden de cientos o miles de elementos. Sencilla e intuitiva.
- LazyCollection: grandes volúmenes (decenas de miles o más) donde interesa ahorrar memoria. Combínala con
cursor()para obtener el máximo rendimiento. get()de Eloquent devuelve una colección normal;cursor()devuelve una LazyCollection.