РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
252 of 1392 menu

Метод groupBy

Метод groupBy применяется к запросу Eloquent или Query Builder для группировки строк результата на основе значений одной или нескольких колонок. Он принимает имя колонки или массив колонок для группировки. Обычно используется в сочетании с агрегатными функциями.

Синтаксис

<?php Model::groupBy($column); ?>

Пример

Сгруппируем статьи по статусу и подсчитаем их количество:

<?php use AppModelsArticle; use IlluminateSupportFacadesDB; $res = Article::select('status', DB::raw('count(*) as total')) ->groupBy('status') ->get(); foreach ($res as $item) { echo "Status: $item->status, Total: $item->total"; } ?>

Результат выполнения кода:

"Status: published, Total: 5" "Status: draft, Total: 3" "Status: archived, Total: 2"

Пример

Сгруппируем по нескольким колонкам и подсчитаем количество:

<?php use AppModelsArticle; use IlluminateSupportFacadesDB; $res = Article::select('status', 'category_id', DB::raw('count(*) as total')) ->groupBy(['status', 'category_id']) ->get(); foreach ($res as $item) { echo "Status: $item->status, Category: $item->category_id, Total: $item->total"; } ?>

Результат выполнения кода:

"Status: published, Category: 1, Total: 3" "Status: published, Category: 2, Total: 2" "Status: draft, Category: 1, Total: 1" "Status: draft, Category: 3, Total: 2"

Пример

Используем группировку с вычислением средней оценки:

<?php use AppModelsArticle; use IlluminateSupportFacadesDB; $res = Article::select('status', DB::raw('AVG(rating) as avg_rating')) ->groupBy('status') ->get(); foreach ($res as $item) { echo "Status: $item->status, Average rating: $item->avg_rating"; } ?>

Результат выполнения кода:

"Status: published, Average rating: 4.5" "Status: draft, Average rating: 3.2" "Status: archived, Average rating: 2.8"

Пример

Группировка с использованием агрегатных функций и сортировки:

<?php use AppModelsArticle; use IlluminateSupportFacadesDB; $res = Article::select('category_id', DB::raw('count(*) as total')) ->groupBy('category_id') ->orderBy('total', 'desc') ->get(); foreach ($res as $item) { echo "Category: $item->category_id, Total articles: $item->total"; } ?>

Результат выполнения кода:

"Category: 1, Total articles: 8" "Category: 2, Total articles: 5" "Category: 3, Total articles: 3"

Смотрите также

  • метод having,
    который добавляет условие к сгруппированным результатам
  • метод orderBy,
    который сортирует результаты запроса
  • метод select,
    который указывает выбираемые колонки
  • метод get,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить