Veja nesse artigo
Introdução
Laravel collection é uma classe que fornece uma forma fácil para trabalhar com matrizes de dados.
O Laravel collection dispõe de diversas funcionalidades para ajudar no desenvolvimento no dia a dia, e as collections são uma excelente forma de trabalhar com arrays.
Isso porque você pode transformar um array em uma collection e utilizar todos os métodos disponíveis, como map, concat, diff, merge, sortBy, orderBy, where e entre muitos outros.
São métodos para filtro de dados, ordenação, separação, junção e entre outros.
Além disso é possível encadear as chamadas desses métodos, para chamar sequencialmente e produzir um único resultado passando por diversas funções.
Saber utilizar a collection pode ajudar muito no dia a dia.
Nesse post você irá ver uma introdução sobre Laravel collection.
Criar collection
É possível criar a partir de um array de dados, que pode ser um array simples ou matriz:
$collection = collect(['Maria', 'José', null, 'Pedro']);
É possível colocar o array dentro de collect
e já será retornado uma collection para ser utilizada.
Repare que um dos dados acima, foi declarado como null
.
Vamos fazer um filtro para excluir esse registro null
da collection.
Para isso é possível utilizar a função reject
, dessa forma:
$collection = $collection->reject(function ($name) {
return empty($name);
}); //['Maria', 'José', 'Pedro']
Repare que na função reject foi passado uma função, que tem a lógica de verificar se um registro é vazio ou não.
Adicionar dados no laravel collection
É possível fazer isso de algumas formas, uma delas é utilizando o método push
.
Esse método é similar ao array_push
do PHP, onde é inserido um item no final de um array, por exemplo:
$collection = collect(['Maria', 'José', 'Pedro']);
$collection->push('Ana');
$collection->all(); ['Maria', 'José', 'Pedro', 'Ana'];
O método all
retorna todos os registros em formato de array.
Com a função push
, os dados sempre serão adicionados no final da collection.
Obter maior valor na collection
Muito utilizado quando trabalhamos com números, é possível obter o maior valor de uma coleção de dados com o método max
.
É possível buscar em uma collection numérica ou que tenha alguma chave em comum para os valores:
$collection = collect([2, 4, 6, 8]);
$collection->max(); // 8
// ou então
$collection = collect([
['valor' => 10],
['valor' => 20],
['valor' => 30]
]);
$collection->max(); // 30
Percorrer collection
Tem várias funções que fazem isso, a forma que vou mostrar abaixo é com a função map
.
Essa função é bem parecida com a do Javascript, é possível percorrer uma lista, modificar os seus itens e obter uma lista nova sem modificar a original.
$collection = collect([2, 4, 6, 8]);
$dobros = $collection->map(function ($item, $chave) {
return $item * 2;
});
$dobros->all(); // [4, 8, 12, 16]
Ordenar valores na collection
Outra funcionalidade bem interessante é a possibilidade de ordenar valores de forma fácil.
Essa ordenação é similar as de bancos de dados, que normalmente fazem com o orderBy
e passando a coluna a ordenar.
No caso do Laravel collection, a forma de ordenar é com o sortBy
.
$collection = collect([
['name' => 'Mesa', 'price' => 300],
['name' => 'Notebook', 'price' => 3000],
['name' => 'Cadeira', 'price' => 500],
]);
$sorted = $collection->sortBy('price');
$sorted->values()->all();
/*
[
['name' => 'Mesa', 'price' => 300],
['name' => 'Notebook', 'price' => 3000],
['name' => 'Cadeira', 'price' => 500],
]
*/
No caso a ordenação foi feita na ordem crescente.
Caso queira ordenar por decrescente, muda somente o comando para sortByDesc
, mas a sintaxe é a mesma.
Verificar itens
Um outro método bem legal é o every
.
Com ele é possível colocar uma condicional em cada item da collection e verificar se todos os itens passam dessa condição, caso sim retorna true, e se não retorna false.
collect([1, 2, 3, 4])->every(function ($value, $key) {
return $value > 2;
});
// false
// ou então
collect([1, 2, 3, 4])->every(function ($value, $key) {
return $value < 10;
});
// true
Conclusão
O Laravel collection é um recurso muito interessante e que da muita produtividade.
Há muitos métodos disponíveis para utilizar, provavelmente dependendo da lógica da sua aplicação você utilize muito mais alguns métodos.
Recomendo que dê uma olhada na documentação do Laravel Collection que é bem completa e com exemplos que podem te ajudar no dia a dia.
Para ver outros canais onde o posto conteúdo veja os Links do Programando Soluções.
Referências
https://laravel.com/docs/9.x/collections
https://www.section.io/engineering-education/laravel-8-collections/