Skip to main content

Doel van deze pagina

Deze pagina gaat niet over het gebruik van collect(), maar biedt een kaart om de implementatiecode van Laravel zelf te lezen. De doelgroep: mensen die de lijst met methodes van Collection al kennen en nu willen begrijpen “waarom het ontwerp zo is”.

Historische ontwikkeling

De structuur van Collections is flink herzien bij de introductie van LazyCollection.

Tot Laravel 5.8

  • Illuminate\Support\Collection
  • Illuminate\Database\Eloquent\Collection (erft van Collection)
Op dat moment bestonden LazyCollection, Enumerable en EnumeratesValues nog niet.

Wijzigingen in Laravel 6.0

Samen met de toevoeging van LazyCollection is de gemeenschappelijke API afgesplitst naar Enumerable (interface) en EnumeratesValues (trait).

De huidige structuur (Laravel 13)

Zie: laravel/framework v13.x
Het huidige, werkelijke bestandspad is src/Illuminate/Collections/*, maar de namespace is Illuminate\\Support gebleven. Houd bij het lezen van de code “pad” en “namespace” dus apart in de gaten.

PHPDoc en generics in PHPStan-stijl

PHP zelf kent geen generics. Toch wordt rondom Collections sterke type-informatie uitgedrukt via PHPDoc. Daar zijn twee hoofddoelen mee gediend:
  • Nauwkeurige IDE-aanvulling
  • Betere precisie van statische analyse met PHPStan / Larastan en dergelijke

Veelvoorkomende notaties

Hoe het eruitziet in de Eloquent Collection

Omdat TValue wordt geconcretiseerd naar TModel, wordt de type-inferentie van map(), filter() en dergelijke sterker toegespitst op Eloquent-modellen.

In welke volgorde je de implementatie leest

1. Begin bij Enumerable

Krijg eerst grip op “welk contract wordt er geboden”. Als je hier het overzicht van methodes doorneemt, lees je de implementaties daarna sneller.

2. Volg de gemeenschappelijke methodes in EnumeratesValues

Veel gemeenschappelijke logica, zoals map, filter en reduce, staat hier. Kijk je daarna alleen naar de verschillen tussen Collection en LazyCollection, dan sla je minder over.

3. Bekijk de verschillen tussen Collection en LazyCollection

  • Collection: houdt een array vast en evalueert direct
  • LazyCollection: evalueert lui met behulp van een Generator
Zelfs bij methodes met dezelfde naam verschillen het evaluatiemoment en het geheugengedrag.

4. Lees als laatste Eloquent\Collection

Concentreer je op de uitbreidingen voor verzamelingen van modellen, zoals find, load en modelKeys. Lees je dit nadat je de basis-Collection begrijpt, dan zie je de bedoeling sneller.
Wil je één methode uitdiepen, volg dan deze route: de declaratie in Enumerable → de implementatie in EnumeratesValues → wel of geen override in Collection / LazyCollection. Zo raak je niet de weg kwijt.

Gerelateerde pagina’s

Laatst gewijzigd op 6 september 2026