У меня есть задача экспортировать 100 000 строк записей из моей базы данных в формат csv.
Как лучше всего это сделать? Я совершенно не знаю, что искать и изучать.
Я хочу иметь частичную загрузку, как и другие сайты с форматом PART, пока загрузка еще не завершена, и в то же время не позволять моему серверу быть исчерпанным.
Как я могу это сделать?
Спасибо!
Обязательно посмотрю спасибо!






Вы можете использовать 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. Спасибо!!!
ОТЛИЧНЫЙ ответ! Но мне пришлось использовать if (isset($line[0])) внутри цикла while.
Сделать можно так:
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?
Ты видел? stackoverflow.com/questions/23759418/… Мне нравится csv.thephpleague.com/9.0/connections/output/….