PauloRB.dev

Desenvolvedor de Software

Collections no PHP e seu uso no Laravel | PauloRB.dev Collections no PHP e seu uso no Laravel – PauloRB.dev
Collections no PHP e seu uso no Laravel

Collections no PHP e seu uso no Laravel

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

Mais Posts

Extensões Visual Studio Code para o dia a dia

Extensões Visual Studio Code para o dia a dia

Segue uma lista das extensões que mais utilizo em meu dia a dia como desenvolvedor quando uso o editor VisualStudio... Leia mais

Entendendo o Commit Semântico e por que ele é essencial para o seu projeto

Entendendo o Commit Semântico e por que ele é essencial para o seu projeto

Quando trabalhamos com projetos de software, o controle de versão é uma parte fundamental para garantir colaboração e organização. Entretanto,... Leia mais

Como Usar a Porta 443 para Conexões SSH com o Bitbucket e Contornar Restrições de Rede

Como Usar a Porta 443 para Conexões SSH com o Bitbucket e Contornar Restrições de Rede

Se você já se deparou com a frustrante mensagem de erro “ssh: connect to host bitbucket.org port 22: Network is... Leia mais

Entendendo o Conceito de Estado no React

Entendendo o Conceito de Estado no React

Em React, o estado refere-se a uma estrutura de dados que determina o comportamento do componente e como ele será... Leia mais