Как сгруппировать коллекцию или массив в Laravel Eloquent?

Для группировки коллекции или массива в Laravel Eloquent вы можете использовать метод groupBy().

Метод groupBy() позволяет группировать данные по определенным критериям. Он принимает аргумент - колонку или список колонок, по которым нужно сгруппировать данные.

Например, предположим у вас есть модель Article, которая имеет поля category и title. Вы хотите сгруппировать статьи по их категориям. Вот пример кода:

$articles = Article::all()->groupBy('category');

В этом примере метод groupBy('category') будет группировать статьи по полю category. Результатом будет коллекция, в которой ключами будут значения поля category, а значениями будет массив статей, относящихся к этой категории.

Вы также можете сгруппировать данные по нескольким полям, передав массив полей в метод groupBy(). Например:

$articles = Article::all()->groupBy(['category', 'author']);

В этом случае статьи будут сгруппированы сначала по полю category, а затем по полю author. Результатом будет коллекция с многомерным массивом.

Вы также можете использовать анонимную функцию в методе groupBy(), чтобы выполнить более сложную логику группировки. Например:

$articles = Article::all()->groupBy(function ($article) {
    return $article->category . '-' . $article->author;
});

В этом случае статьи будут сгруппированы по комбинации полей category и author. Результатом будет коллекция с ключами, состоящими из значения полей category и author, и массивами статей.

Для работы с группированной коллекцией вы можете использовать стандартные методы Laravel Eloquent, такие как pluck(), count(), sum(), avg() и другие.

Таким образом, метод groupBy() позволяет сгруппировать коллекцию или массив в Laravel Eloquent по одному или нескольким полям и выполнить различные операции сгруппированными данными.