Skip to main content

Was sind Collections?

Die Klasse Illuminate\Support\Collection ist ein fluenter Wrapper für Array-Daten. Statt einzelne PHP-Standardfunktionen für Arrays aneinanderzureihen, können Sie Daten mit Methoden-Chaining intuitiv verarbeiten.
Collections sind immutable (unveränderlich). Jede Methode verändert die ursprüngliche Collection nicht, sondern liefert eine neue Instanz zurück. Sie können sicher arbeiten, ohne die Originaldaten zu verlieren.

Collections erzeugen

Helper collect()

Die gebräuchlichste Variante. Übergeben Sie ein Array, um eine Collection zu erzeugen.

Collection::make()

Entspricht collect(). Verwenden Sie diese Form, wenn Sie den Facade-Stil bevorzugen.

Collection::fromJson()

Erzeugt eine Collection aus einem JSON-String. Praktisch für die Verarbeitung externer API-Antworten.

Häufig genutzte Methoden

map – jedes Element transformieren

Wendet eine Funktion auf jedes Element an und liefert eine neue Collection mit den transformierten Werten zurück.

filter / reject – nach Bedingung filtern

filter() behält nur die Elemente, die der Bedingung entsprechen; reject() schließt diese aus.
Nach filter() können Indizes lückenhaft werden. Ein Aufruf von values() weist die Indizes ab 0 neu zu.

first / last – einzelnes Element ermitteln

Liefert das erste bzw. letzte Element, das die Bedingung erfüllt.

pluck – nur einen bestimmten Schlüssel extrahieren

Extrahiert aus verschachtelten Arrays oder Modellen ein bestimmtes Feld.

groupBy – nach einem Schlüssel gruppieren

sortBy / sortByDesc – sortieren

each – Verarbeitung pro Element ausführen

Für Vorgänge mit Seiteneffekten (Log-Ausgabe, E-Mail-Versand usw.). Die Collection selbst wird nicht verändert.

flatMap – mappen und eine Ebene flatten

Wandelt jedes Element in ein Array um und flacht das Ergebnis um eine Ebene ab.

reduce – aggregieren

Reduziert die gesamte Collection auf einen einzelnen Wert.
Für einfache Summen können Sie sum() verwenden: $orders->sum(fn ($o) => $o['price'] * $o['quantity'])

reduceInto – in ein Objekt aggregieren

Reduziert ähnlich wie reduce, die Callback-Funktion muss aber keinen Rückgabewert liefern. Praktisch, wenn Sie ein bestehendes Objekt direkt mutieren möchten.
Bei reduce wird der Rückgabewert der Callback zum nächsten $carry, was sich gut für primitive Werte eignet. reduceInto mutiert dagegen kontinuierlich ein Objekt und führt so zu übersichtlicherem Code.
Möchten Sie in einen Skalar oder ein Array aggregieren, verwenden Sie in der Callback eine Referenz (&).

chunk – aufteilen

Zerlegt eine große Collection in Blöcke einer angegebenen Größe. Praktisch für Batch-Verarbeitung oder Anzeige.

Methoden-Chaining

Die eigentliche Stärke von Collections liegt im Methoden-Chaining. Mehrere Operationen lassen sich verketten, sodass komplexe Datentransformationen in einem einzigen Ausdruck möglich werden.

Zusammenspiel mit Eloquent

Ergebnisse von Eloquent-Abfragen werden stets als Instanzen von Illuminate\Database\Eloquent\Collection zurückgegeben. Diese erbt von der Basis-Collection, sodass alle oben gezeigten Methoden zur Verfügung stehen.
Filterung und Sortierung, die die Datenbank effizient erledigen kann, sollten Sie über den Query Builder (where, orderBy usw.) durchführen und nicht erst auf der Collection anwenden. Andernfalls laden Sie unnötige Daten in den Speicher.

Eloquent-spezifische Collection-Methoden

Eloquent\Collection verfügt zusätzlich über einige eigene Methoden.

Lazy Collections

Während gewöhnliche Collections die gesamten Daten in den Arbeitsspeicher laden, nutzt eine LazyCollection PHP-Generatoren und verarbeitet die Daten Element für Element. Bei mehreren Zehntausend Datensätzen oder mehr sparen Sie damit deutlich Arbeitsspeicher.

LazyCollections erzeugen

Batch-Verarbeitung großer Datenmengen

cursor() holt Datensätze einzeln aus der Datenbank und spart bei großen Ergebnismengen erheblich Speicher. Beachten Sie jedoch, dass die Datenbankverbindung bis zum Ende der Verarbeitung offen bleibt.

Paginierung mit take und skip

Zusammenfassung

Collections lesen sich deutlich klarer als geschachtelte Array-Funktionen.
  • Normale Collection: einige Hundert bis wenige Tausend Datensätze. Einfach und intuitiv.
  • LazyCollection: mehrere Zehntausend Datensätze oder mehr, wenn Sie Speicher sparen möchten. In Kombination mit cursor() besonders wirkungsvoll.
  • get() liefert bei Eloquent eine normale Collection, cursor() eine LazyCollection.
Zuletzt geändert am 13. Juli 2026