Collections
Uma Collection da MUCRM é um objeto inteligente que envolve arrays de PHP comuns para fornecer uma interface fluida, encadeável e expressiva para manipulação de conjuntos de dados.
Model::get(), Model::where()->get() e relacionamentos como attachMany) devolvem uma Collection.Criando Collections Manualmente
Você pode criar uma Collection a partir de qualquer array usando o helper global collect():
$nomes = ["João", "Maria", "Pedro", "Carlos"];
$collection = collect($nomes);Métodos Disponíveis
each()
Percorre todos os itens da Collection executando um callback.
$user->orders->each(function ($order) {
echo $order->id;
});map()
Transforma cada item da Collection e retorna uma nova Collection com os resultados.
$ids = $user->orders->map(fn ($order) => $order->id);filter()
Filtra os itens da Collection de acordo com uma condição lógica.
$ativos = $user->orders->filter(fn ($order) => $order->status === 1);first()
Obtém o primeiro registro da Collection ou o primeiro que atenda a um critério.
$primeiro = $user->orders->first();
$vip = $user->orders->first(fn ($order) => $order->price > 500);pluck()
Extrai os valores de uma coluna específica dos itens da Collection.
$nomes = $user->orders->pluck("name");
// Retorna: ["Pedido 1", "Pedido 2", "Pedido 3"]groupBy()
Agrupa os registros por uma determinada coluna ou critério. Cada grupo retornado é uma Collection.
$grupos = $user->orders->groupBy("status");
$ativos = $grupos[1];implode()
Une todos os valores de uma coluna em uma única string usando um separador.
$lista = $user->orders->implode("name", ", ");
// Retorna: "Pedido 1, Pedido 2, Pedido 3"sum()
Calcula a soma dos valores de uma determinada coluna.
$total = $user->orders->sum("price");avg()
Calcula a média aritmética dos valores de uma chave ou coluna.
$media = $user->orders->avg("price");take()
Retorna uma nova Collection com o número especificado de itens. Passando um número negativo, retorna os itens finais da Collection.
$primeirosDois = collect($nomes)->take(2);
$ultimosDois = collect($nomes)->take(-2);sortBy()
Ordena a Collection com base em uma determinada chave. Aceita um segundo parâmetro opcional "desc" para ordem decrescente.
$ordenados = collect($users)->sortBy("level");
$ordenadosDesc = collect($users)->sortBy("level", "desc");Exclusão em Cascata com drop()
A Collection possui o método drop(), responsável por apagar todos os modelos carregados na árvore de relacionamento de banco de dados.
$user->orders->drop();drop('filhos.netos.bisnetos') para apagar os níveis inferiores recursivamente antes do pai, evitando erros de Foreign Key.Encadeamento de Métodos
Como a maioria dos métodos retorna uma nova instância de Collection, você pode encadear as operações de forma fluida:
$totalFiltro = $user->orders
->filter(fn ($order) => $order->status === 1)
->map(fn ($order) => $order->price)
->sum();