Collections no PHP e seu uso no Laravel
Por Paulo RB em 30/06/2025
Ao desenvolver aplicações modernas com PHP, uma das tarefas mais comuns é manipular arrays — filtrando, transformando ou agrupando dados. Embora o PHP nativamente ofereça funções poderosas para isso, como array_map
, array_filter
e array_reduce
, o Laravel introduz um recurso que torna esse trabalho mais fluido e expressivo: as Collections.
O que são Collections?
No Laravel, uma Collection é um objeto da classe Illuminate\Support\Collection
que encapsula arrays e oferece uma interface fluente, orientada a métodos, para manipular dados. Em vez de trabalhar diretamente com arrays e funções avulsas, você passa a usar métodos encadeáveis, como filter()
, map()
, pluck()
, groupBy()
e muitos outros.
Exemplo simples:
$nomes = collect(['Ana', 'Bruno', 'Carlos'])
->map(fn($nome) => strtoupper($nome))
->reject(fn($nome) => $nome === 'BRUNO');
print_r($nomes->all()); // ['ANA', 'CARLOS']
Vantagens de usar Collections
-
Leitura fluente e expressiva: o código se torna mais fácil de ler e manter.
-
Encadeamento de métodos: facilita a composição de transformações complexas.
-
Consistência: evita erros comuns com manipulação direta de arrays.
Como criar uma Collection no Laravel
Você pode criar uma collection com o helper global collect()
:
$dados = collect([1, 2, 3, 4, 5]);
Além disso, muitos métodos internos do Laravel já retornam collections. Por exemplo, uma consulta com Eloquent retorna uma Collection
de modelos:
$usuarios = User::where('ativo', true)->get(); // Retorna uma Collection
Métodos úteis das Collections
Método |
Descrição |
map() |
Transforma os itens da collection |
filter() |
Filtra os itens com base numa condição |
pluck() |
Extrai um campo de cada item da collection |
groupBy() |
Agrupa itens com base em uma chave |
each() |
Itera sobre cada item da collection |
first() |
Retorna o primeiro item que satisfaz uma condição |
contains() |
Verifica se um item está presente |
sortBy() |
Ordena os itens com base em uma chave |
Exemplo com groupBy
:
$usuarios = collect([
['nome' => 'Ana', 'setor' => 'RH'],
['nome' => 'Bruno', 'setor' => 'TI'],
['nome' => 'Carla', 'setor' => 'TI'],
]);
$agrupados = $usuarios->groupBy('setor');
print_r($agrupados->toArray());
Saída:
[
'RH' => [['nome' => 'Ana', 'setor' => 'RH']],
'TI' => [
['nome' => 'Bruno', 'setor' => 'TI'],
['nome' => 'Carla', 'setor' => 'TI'],
]
]
Diferenças entre array functions e Collections
Característica |
Funções de array (nativas do PHP) |
Collections do Laravel |
Sintaxe |
Procedural |
Orientada a objetos |
Encadeamento |
Limitado (precisa aninhar funções) |
Fluido com métodos em cadeia |
Retorno |
Sempre array |
Objeto Collection |
Métodos |
Limitado ao que o PHP oferece |
Rico em recursos (centenas de métodos) |
Leitura |
Pode ficar verbosa em transformações complexas |
Muito mais legível e expressiva |
Extensibilidade |
Difícil de estender |
Pode criar macros e extender Collection |
Disponibilidade |
Nativo em qualquer PHP |
Disponível apenas com Laravel ou ao instalar o pacote separadamente |
Exemplo comparativo:
Usando array functions:
$resultado = array_filter(
array_map(
fn($n) => $n * 2,
[1, 2, 3, 4, 5]
),
fn($n) => $n > 5
);
print_r($resultado); // [3 => 6, 4 => 8, 5 => 10]
Usando Collection:
$resultado = collect([1, 2, 3, 4, 5])
->map(fn($n) => $n * 2)
->filter(fn($n) => $n > 5)
->values(); // Remove as chaves
print_r($resultado->all()); // [6, 8, 10]
Integração com Eloquent
As Collections são ainda mais poderosas quando utilizadas em conjunto com o Eloquent ORM. Por exemplo:
$usuarios = User::all();
$ativos = $usuarios->filter(fn($user) => $user->ativo);
Convertendo de volta para array
Se necessário, você pode converter uma Collection novamente para array com o método all()
ou toArray()
:
$array = $colecao->toArray();
Dica: Use when()
para condições elegantes
$dados = collect([1, 2, 3, 4, 5])
->when(true, fn($c) => $c->filter(fn($n) => $n > 2));
As Collections no Laravel são uma forma elegante, expressiva e poderosa de trabalhar com arrays e dados em geral. Comparadas às funções nativas do PHP, elas oferecem uma experiência mais fluida, legível e produtiva para o desenvolvedor moderno. Se você ainda não usa, experimente — seu código vai agradecer.
Fontes e Leituras Recomendadas