Site

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.

ℹ️Retorno automático
Todas as consultas de banco de dados que retornam múltiplos registros (como 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();
💡Dica
Se você precisar deletar uma árvore profunda de relacionamentos, utilize 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();