Laravel: извлечение больших данных из API (URL) - PullRequest
0 голосов
/ 19 января 2020

Здравствуйте, я пытаюсь получить 15000 объектов из API, я использовал guzzle и file_get_contents, но это занимает много времени, и иногда страница загружается не полностью. контроллер:

$client = new \GuzzleHttp\Client();
        $request = $client->get('http://XXX');
        $response = $request->getBody();
        $books = json_decode($response, true);

        return view('n.search', compact('books'));

переменная books возвращает 10000 элементов и загружается очень долго! Не могли бы вы помочь мне это исправить?

1 Ответ

0 голосов
/ 19 января 2020

Вот пример, просто чтобы дать вам представление о том, как я создал такую ​​проблему.

в вашем контроллере вы всегда должны разбивать на страницы возвращенную коллекцию. Как показано ниже

$users = User::all()->paginate(100);

laravel вернет этих 20 пользователей вместе с некоторыми данными, такими как, следующий URL, предыдущий URL, current_page и т. Д. c. Эти дополнительные данные важны для того, чтобы вы знали, какой следующий URL и предыдущий URL-адрес (эти URL-адреса будут использоваться в ваших запросах API);

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

$total_users = User::all()->count();

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

public function getUsers() {
    $users = User::all()->paginate(20);
    $total_users = User::all()->count();

    return compact('users', 'total_users');
}

и будет возвращать эти результаты.

users    // the 20 users
total_users // the total number of users in your table
currentPage
lastPage
perPage
hasMorePages
url
nextPageUrl
firstItem
lastItem
total
count

и так, каждый когда вы нажимаете на страницы в вашей таблице данных, вам просто нужно использовать nextNagePageUrl и prevPageUrl в качестве URL в вашем запросе API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...