Как сгрупировать запрос в Laravel?

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

Например, пусть у нас есть модель User для работы с таблицей пользователей. Мы хотим сгруппировать пользователей по их роли. Мы можем сделать это следующим образом:

$users = User::groupBy('role')->get();

Этот код выполнит запрос, который сгруппирует пользователей по столбцу role и вернет коллекцию объектов User.

Вы также можете использовать метод groupBy вместе с другими методами запросов, например select() и orderBy(). Например, если мы хотим выбрать только уникальные роли пользователей и отсортировать их в алфавитном порядке, мы можем использовать следующий код:

$roles = User::select('role')
            ->groupBy('role')
            ->orderBy('role')
            ->get();

Этот код выполнит запрос, который выберет только уникальные значения столбца role, сгруппирует их и отсортирует в алфавитном порядке, а затем вернет коллекцию объектов с одним столбцом role.

Для более сложных группировок вы можете передать массив имен столбцов в метод groupBy(). Например, предположим, что у нас есть таблица с историей покупок, содержащая столбцы user_id, product_id и purchase_date. Мы можем сгруппировать их по user_id и product_id следующим образом:

$purchaseHistory = Purchase::groupBy(['user_id', 'product_id'])->get();

Этот код выполнит запрос, который сгруппирует историю покупок по столбцам user_id и product_id и вернет коллекцию объектов Purchase.

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