Was sind Collections?
Die KlasseIlluminate\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.
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.
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.
&).
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 vonIlluminate\Database\Eloquent\Collection zurückgegeben.
Diese erbt von der Basis-Collection, sodass alle oben gezeigten Methoden zur Verfügung stehen.
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 eineLazyCollection 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
Häufig genutzte Methoden
Häufig genutzte Methoden
Collections vs. Array-Funktionen
Collections vs. Array-Funktionen
Collections lesen sich deutlich klarer als geschachtelte Array-Funktionen.
Normale Collection vs. LazyCollection
Normale Collection vs. LazyCollection
- 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.