groupBy() - організація даних як у таблиці
Потрібно показати пости за категоріями? Вкладені цикли не потрібні.
groupBy() групує колекцію за ключем.
Як працює:
Повертає масив груп, де кожна група - окрема колекція.
Розширені можливості:
- Групування за callback
- Кілька рівнів групування
- Dot notation
Порада: ідеально для аналітики, звітів і категоризації.
// Групування за категорією
$byCategory = $posts->groupBy('category_id');
// Групування за роком
$byYear = $posts->groupBy(fn($p) => $p->created_at->year);
// Доступ до груп
foreach ($byCategory as $categoryId => $posts) {
echo "Category {$categoryId}: {$posts->count()} posts\n";
}
// Кілька рівнів
$byYearMonth = $posts->groupBy([
fn($p) => $p->created_at->year,
fn($p) => $p->created_at->month,
]);
// Групування по зв'язку
$byPostTitle = $comments->groupBy('post.title');
// Практичний приклад - суми продажів
$report = $orders->groupBy('status')
->map(fn($group) => $group->sum('total'));