Wat zijn collections
De klasseIlluminate\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.
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.
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.
&) 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.
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 eenIlluminate\Database\Eloquent\Collection-instantie.
Die erft van de basis-Collection, dus alle bovenstaande methoden zijn beschikbaar.
Eloquent-specifieke collection-methoden
Eloquent\Collection heeft extra methoden.
Lazy collections
Een gewone collection laadt alle data in het geheugen, maar eenLazyCollection 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
Overzicht van veelgebruikte methoden
Overzicht van veelgebruikte methoden
Collections vs arrayfuncties
Collections vs arrayfuncties
Collections zijn veel beter leesbaar dan arrayfuncties.
Gewone collection vs LazyCollection
Gewone collection vs LazyCollection
- 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.