Для группировки коллекции или массива в 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 по одному или нескольким полям и выполнить различные операции сгруппированными данными.