@kaxa3201

Как ускорить запрос при groupBy?

Как можно ускорить выборку? Записей очень много
$rows->get()->groupBy(function ($item) {
                    return sprintf(
                        '%s by %s',
                        $item->created_at->format('Y-m-d H:i:s'),
                        is_null($item->user) ? 'undefined' : $item->user->getNameAttribute()
                    );
                }
            )->paginate($paginate);

Результат моей выбоки
6225048dea540703950223.png
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
Если это прям постоянно нужно, то можно провести денормализацию: добавить модель-таблицу со значением группировки (return sprintf(
'%s by %s',
$item->created_at->format('Y-m-d H:i:s'),
is_null($item->user) ? 'undefined' : $item->user->getNameAttribute()
); и вот это всё), и поле в исходной таблицы с её id, сделать по значению группировки индекс, получать только нужные значения группировки из этой таблицы, а затем после получения страницы уже получать туда нужные данные исходной таблицы, например через https://laravel.com/docs/8.x/eloquent-relationship...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AmdY
@AmdY
PHP и прочие вебштучки
Вы путаете запрос к базе и работу с коллекцией.
$rows->get() - вернула вам уже кучу мусора, а дальше вы с ней работаете на стороне php. Делайте группировку на стороне ДБ средствами sql
$rows->groupBy(...)->get()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы