Как потоковая загрузка данных из текущего представления в Laravel 5.7 - PullRequest
0 голосов
/ 07 ноября 2018

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

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

Информация, которую я нашел об отправке данных на маршрут, включает в себя отправку параметров для URL, который, я не уверен, мне помогает.

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

1 Ответ

0 голосов
/ 07 января 2019

Вот как я это делаю с Laravel 5.6 в view, когда пользователь хочет загрузить файл csv. Обратите внимание, что вы должны передать объект Builder вместо LengthAwarePaginator. Также обратите внимание на метод send() после streamDownload, который я должен был понять сам.

/** @var \Illuminate\Database\Query\Builder $results */
$callback = function () use ($results) {
    $file = fopen('php://output', 'w');
    // Set column names from the first result keys
    fputcsv($file, array_keys((array)$results->first()));

    // Get results in chunks to stream large downloads
    $results->chunk(1000,
        function ($rows) use ($file) {
            foreach ($rows as $row) {
                fputcsv($file, (array)$row);
            }
        }
    );

    fclose($file);
};
$headers = [
    'Content-Type' => 'text/csv',
];

return response()->streamDownload($callback, 'filename.csv', $headers)->send();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...