Skip to main content

Qu’est-ce qu’une Collection

Illuminate\Support\Collection est un wrapper fluide pour manipuler des tableaux. Plutôt que d’enchaîner les fonctions natives, vous chaînez intuitivement les traitements.
Les collections sont immuables : chaque méthode retourne une nouvelle instance sans modifier l’originale. Vous manipulez en toute sécurité.

Créer une Collection

Helper collect()

Le plus courant.

Collection::make()

Équivalent, style façade.

Collection::fromJson()

Depuis une chaîne JSON — pratique pour les réponses d’API.

Méthodes courantes

map — Transformer chaque élément

filter / reject — Filtrer

filter conserve ce qui satisfait la condition, reject fait l’inverse.
Après filter, les indices deviennent trous. values() renumérote à partir de 0.

first / last

pluck — Extraire un champ

groupBy

sortBy / sortByDesc

each — Effets de bord

Pour la journalisation, l’envoi de mails, etc. La collection n’est pas modifiée.

flatMap

Transforme chaque élément en tableau puis aplatit d’un niveau.

reduce

Réduit la collection à une seule valeur.
Pour une simple somme, utilisez sum() : $orders->sum(fn ($o) => $o['price'] * $o['quantity']).

reduceInto

Comme reduce, mais la callback n’a pas besoin de retourner de valeur. Pratique pour muter un objet directement.
reduce pour les valeurs primitives ; reduceInto pour muter un objet.
Pour des scalaires ou tableaux, utilisez le passage par référence (&).

chunk

Découpe en lots de taille fixe.

Chaînage

La force des collections : chaîner les opérations en une seule expression.

Intégration avec Eloquent

Les résultats Eloquent sont des Illuminate\Database\Eloquent\Collection, qui héritent des collections de base.
Effectuez filtrage et tri en SQL (where, orderBy) quand c’est possible. Filtrer une collection après coup charge inutilement toutes les données en mémoire.

Méthodes propres à Eloquent

Lazy Collections

Les collections classiques chargent tout en mémoire. LazyCollection utilise les générateurs PHP pour traiter élément par élément — précieux sur de gros volumes.

Créer une LazyCollection

Traitement de masse

cursor() récupère les lignes une par une, économisant la mémoire. La connexion DB reste ouverte jusqu’à la fin.

Pagination avec take / skip

Récapitulatif

Les collections sont bien plus lisibles.
  • Collection : quelques centaines à quelques milliers d’éléments. Simple et intuitif.
  • LazyCollection : dizaines de milliers d’éléments et plus. Économe en mémoire. Idéal avec cursor().
  • get() retourne une Collection, cursor() retourne une LazyCollection.
Dernière modification le 13 juillet 2026