Методы экспорта большого файла CSV с помощью Symfony

У меня есть задача экспортировать 100 000 строк записей из моей базы данных в формат csv.

Как лучше всего это сделать? Я совершенно не знаю, что искать и изучать.

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

Как я могу это сделать?

Спасибо!

Ты видел? stackoverflow.com/questions/23759418/… Мне нравится csv.thephpleague.com/9.0/connections/output/….

Lawrence Cherone 19.07.2018 07:06

Обязательно посмотрю спасибо!

iamjc015 19.07.2018 07:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
2
3 140
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать StreamedResponse из компонента Symfony HttpFoundation в сочетании с Доктрина повторять.

Что-то вроде этого:

$response = new StreamedResponse(function () {
    $data = $this->myQuery()->iterate();
    $csv = fopen('php://output', 'w+');
    while (false !== ($line = $data->next())) {
        fputcsv($csv, [$line[0]->column1], ';');
    }
    fclose($csv);
});
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename = "file.csv"');

Фантастический! Это был ЕДИНСТВЕННЫЙ ответ, который я нашел после долгих поисков, который генерирует файл CSV без необходимости иметь дело с Twig. Спасибо!!!

xarlymg89 31.12.2018 11:57

ОТЛИЧНЫЙ ответ! Но мне пришлось использовать if (isset($line[0])) внутри цикла while.

Roubi 11.12.2020 18:18

Сделать можно так:

Controller Function:

private function downloadCSV(QueryBuilder $query): Response
    {
        $csv = $this->renderView('templates/csv/template.csv.twig', [
            'data' => $query->getQuery()->getResult(),
        ]);

        // crafting response
        $response = new Response($csv);

        $disposition = $response->headers->makeDisposition(
            ResponseHeaderBag::DISPOSITION_ATTACHMENT,
            sprintf('file_%s.csv', time()));
        $response->headers->set('Content-Type', 'text/csv');
        $response->headers->set('Content-Disposition', $disposition);

        return $response;
    }

Render CSV in template:

{% set header = [
    'Internal Id',
    'title',
    'url'
] %}
{{ str_putcsv(header) }}
{% for i in data %}
{% spaceless %}
    {% set row = [
        i.id,
        i.title,
        absolute_url(path('route_to_post', { data: i.id }))
    ] %}
{% endspaceless %}
{{ str_putcsv(row) }}
{% endfor %}

Привет, ваш ответ интересный, вы можете объяснить, что делает функция str_putcsv?

Eve 16.06.2020 14:44

Другие вопросы по теме