Skip to main content

Wat zijn collections

De klasse Illuminate\Support\Collection is een vloeiende wrapper voor het werken met arraydata. In plaats van de standaard PHP-arrayfuncties afzonderlijk aan te roepen, kun je data intuïtief bewerken met method chaining.
Collections zijn immutable (onveranderlijk). Elke methode wijzigt de oorspronkelijke collection niet, maar geeft een nieuwe collection-instantie terug. Zo kun je veilig werken terwijl de oorspronkelijke data behouden blijft.

Een collection maken

De collect() helper

Dit is de meest gebruikte manier. Je geeft een array door om een collection te maken.

Collection::make()

Gelijkwaardig aan collect(). Gebruik dit als je liever in facade-stijl schrijft.

Collection::fromJson()

Maakt een collection van een JSON-string. Handig bij het verwerken van responses van externe API’s.

Veelgebruikte methoden

map — elk element transformeren

Past een bewerking toe op elk element van de collection en geeft een nieuwe, getransformeerde collection terug.

filter / reject — filteren op voorwaarde

filter() houdt alleen de elementen die aan de voorwaarde voldoen, reject() verwijdert juist de elementen die aan de voorwaarde voldoen.
Na filter() ontstaan er gaten in de indexen. Roep values() aan om ze opnieuw te nummeren vanaf 0.

first / last — één element ophalen

Geeft het eerste of laatste element terug dat aan de voorwaarde voldoet.

pluck — alleen de waarden van een specifieke sleutel ophalen

Haalt alleen een specifiek veld uit geneste arrays of modellen.

groupBy — groeperen op een specifieke sleutel

sortBy / sortByDesc — sorteren

each — een bewerking uitvoeren op elk element

Gebruik dit voor bewerkingen met bijwerkingen (logging, e-mails versturen, enz.). De collection zelf wordt niet gewijzigd.

flatMap — mappen en één niveau afvlakken

Transformeert elk element naar een array en maakt het geheel plat tot één dimensie.

reduce — aggregeren

Vouwt de hele collection samen tot één waarde.
Voor een eenvoudige som kun je sum() gebruiken: $orders->sum(fn ($o) => $o['price'] * $o['quantity'])

reduceInto — aggregeren in een object

Voert net als reduce een samenvouwbewerking uit, maar met het verschil dat de callback geen returnwaarde hoeft terug te geven. Handig wanneer je een bestaand object rechtstreeks wilt muteren.
Bij reduce wordt de returnwaarde van de callback de volgende $carry, waardoor het geschikt is voor het aggregeren van primitieve waarden. reduceInto blijft hetzelfde object wijzigen, wat eenvoudigere code oplevert.
Wil je aggregeren in een scalar of array, gebruik dan pass-by-reference (&) in de callback.

chunk — opsplitsen

Splitst een grote collection op in stukken van een opgegeven grootte. Handig voor batchverwerking of weergave op het scherm.

chunkBy — opsplitsen op aangrenzende waarden

chunkBy groepeert “aangrenzende” elementen met dezelfde waarde voor een opgegeven sleutel of callback, en splitst ze op in meerdere kleinere collections. Zo kun je bijvoorbeeld naast elkaar liggende producten met dezelfde parent groeperen.
Anders dan bij groupBy komen elementen met dezelfde waarde die niet aangrenzend zijn in afzonderlijke chunks terecht.

Method chaining

De ware kracht van collections zit in method chaining. Je kunt meerdere bewerkingen aan elkaar koppelen en complexe datatransformaties in één expressie uitdrukken.

Integratie met Eloquent

De resultaten van Eloquent-queries worden altijd teruggegeven als een Illuminate\Database\Eloquent\Collection-instantie. Die erft van de basis-Collection, dus alle bovenstaande methoden zijn beschikbaar.
Filteren en sorteren dat de database kan afhandelen, doe je beter met de query builder (where, orderBy, enz.) in plaats van met collection-bewerkingen. Als je pas na de conversie naar een collection filtert, laad je onnodige data volledig in het geheugen.

Eloquent-specifieke collection-methoden

Eloquent\Collection heeft extra methoden.

Lazy collections

Een gewone collection laadt alle data in het geheugen, maar een LazyCollection maakt gebruik van PHP-generators en verwerkt data één voor één. Bij grote datasets van tienduizenden records of meer bespaar je zo geheugen.

Een LazyCollection maken

Batchverwerking van grote datasets

cursor() haalt records één voor één op uit de database, waardoor je bij het verwerken van grote hoeveelheden records flink geheugen bespaart. De databaseverbinding blijft wel open tot de verwerking is voltooid.

Pagineren met take en skip

Samenvatting

Collections zijn veel beter leesbaar dan arrayfuncties.
  • Gewone collection: datasets van enkele honderden tot duizenden records. Eenvoudig en intuïtief.
  • LazyCollection: grote datasets van tienduizenden records of meer, of wanneer je geheugen wilt besparen. Vooral effectief in combinatie met cursor().
  • get() van Eloquent geeft een gewone collection terug, cursor() een LazyCollection.
Laatst gewijzigd op 6 september 2026