Я не думаю, что кому-то нужно будет видеть 500 000 результатов на одной странице, вам нужно разбить его на части и разбить на страницы результаты. Вы также можете использовать chunk или метод cursor . Выберите тот, который наилучшим образом соответствует вашим потребностям.
Если это должен просмотреть пользователь, я бы предложил разбить на страницы результаты. Таким образом, пользователь может go перейти к следующей странице и следующей странице и т.д. c. Или нажмите кнопку «Загрузить еще», чтобы запросить у вашего API загрузку страницы 2, а затем страницы 3 et c.
Если это просто для обработки данных для манипуляции или обновления значений, я бы предложил использовать чанк или курсор .
Для разбивки на страницы:
Movie::where('title', 'LIKE', '%'.$search.'%')->paginate(20);
Это приведет к 20 элементов на странице.
Источник: https://laravel.com/docs/pagination#introduction
К чану:
Movie::where('title', 'LIKE', '%'.$search.'%')->chunk(200, function ($movies) {
foreach ($movies as $movie) {
//
}
});
Это будет вызывать 200 за один раз, затем l oop через них.
Источник: https://laravel.com/docs/eloquent#chunking -результаты
Чтобы использовать метод курсора:
foreach (Movie::where('title', 'LIKE', '%'.$search.'%')->cursor() as $movie) {
//
}
Это будет перебирать записи вашей базы данных с помощью курсора, который будет выполнять только один запрос.
Источник: https://laravel.com/docs/eloquent#chunking -результаты
Laracasts имеет 10мин видео его объяснение подробно.