2016-08-26 7 views
0

меня ниже в моей таблицеLaravel Mysql - Group By

id zip_code city    region    municipality     created_at   updated_at 
------ -------- ---------------- ------------------ --------------------- ------------------- --------------------- 
    1  2100 København Ø  Region Hovedstaden Københavns Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 
    2  2150 Nordhavn   Region Hovedstaden Københavns Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 
    3  2200 København N  Region Hovedstaden Københavns Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 
    4  2300 København S  Region Hovedstaden Københavns Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 
    5  2400 København NV  Region Hovedstaden Københavns Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 
    6  2700 København B  Region Nordstran Hårlev Komune   2016-08-26 13:13:56 2016-08-26 13:13:59 
    7  3540 Lynge    Region Hovedstaden Egedal Kommune   2016-08-24 19:32:05 2016-08-24 19:32:05 
    8  3550 Slangerup   Region Hovedstaden Hillerød Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 
    9  3670 Veksø Sjælland Region Hovedstaden Egedal Kommune   2016-08-24 19:32:05 2016-08-24 19:32:05 
    10  4050 Skibby   Region Hovedstaden Frederikssund Kommune 2016-08-24 19:32:05 2016-08-24 19:32:05 
    11  2610 Rødovre   Region Hovedstaden Københavns Kommune  2016-08-24 19:32:05 2016-08-24 19:32:05 

Я использую ниже код, чтобы получить мой результат таблицы.

\App\Models\Backend\AreaCodes::orderBy('region', 'desc')->get()->groupBy('region')->toArray(); 

Так я получаю результат, где моя таблица группируется по «регион» это работает отлично, но в некоторых регионах у меня есть около 500 строк в том же регионе.

Как можно разделить группы на несколько меньших групп с тем же именем, что и область, содержащая следующие 100 строк.

Итак, я получаю группы, которые выглядят ниже.

Group (область Hovedstaden) = 100 строк
Group (область Hovedstaden) = 100 строк
Group (область Hovedstaden) = 100 строк

В общей сложности я получил 1400 строк в моей таблице.

Я пробовал под кодом.

\App\Models\Backend\AreaCodes::orderBy('region', 'desc')->paginate(2)->get()->groupBy('region')->toArray(); 

Но это дает ошибку
Отсутствует аргумент 1 для Осветите \ Support \ Collection :: получить () постраничной работу доцент Laravel, если я использую group_by, что я могу сделать?

Я также проверил эту ссылку Get top n records for each group of grouped results здесь не помогло.

Я надеюсь, что ваши парни меня поймут :)

С уважением.

+0

Возможный дубликат [Получить Top N записей для каждой группы сгруппированных результатов] (Http: // StackOverflow. com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results) – Shadow

+3

Вы можете использовать метод '-> paginate (100)' для построителя запросов. [Проверить документы] (https://www.laravel.com/docs/5.3/pagination#paginating-query-builder-results) –

+0

Привет @JhonnyWalker, где я должен разместить -> paginate (100) в моем запросе. Я попробовал это \ App \ Models \ Backend \ AreaCodes :: orderBy ('region', 'desc') -> paginate (2) -> get() -> groupBy ('region') -> toArray(); но затем я получаю Missing аргумент 1 для Illuminate \ Support \ Collection :: get() – user3502250

ответ

-1

Я не совсем уверен, но думаю, что paginate (2) и get() и array() не работают все вместе.
Предлагаю вам попробовать только paginate (2) и paginate (2) -> toArray();

0
\App\Models\Backend\AreaCodes::orderBy('region', 'desc') 
->groupBy('region') 
->paginate(2) 
->toArray(); 

должно работать, если вы используете разбивку на страницы на своем виде.

Если вы просто хотите, чтобы ограничить результаты, которые вы выборку из базы данных вы можете использовать skip/take

App\Models\Backend\AreaCodes::orderBy('region', 'desc') 
->groupBy('region') 
->skip(500) // skips 500 rows 
->take(500) // takes 500 rows 
->get() 
->toArray();