Я взял на себя проект Laravel, в котором используется пакет Yajra DataTables. Таблица отображается нормально, и я смог добавить кнопку экспорта CSV / Excel, которая по большей части работает нормально.
Проблема, с которой я сталкиваюсь, заключается в том, что наше приложение время от времени выводит 10 тыс. Записей, и когда я пытаюсь экспортировать полный набор данных в CSV, это приводит к ошибке внутреннего сервера 500 с пустой страницей в браузере (пустой ответ) после короткое время.
Я пробовал обновлять все пакеты Laravel и Laravel DataTables и пробовал код из различных сообщений на форуме, чтобы попытаться переопределить buildExcelFile()
пакета логикой, которая может блокировать обработку, но я всегда получаю один и тот же результат.
Исходный метод (исходный код):
protected function buildExcelFile()
{
/** @var \Maatwebsite\Excel\Excel $excel */
$excel = app('excel');
return $excel->create($this->getFilename(), function (LaravelExcelWriter $excel) {
$excel->sheet('exported-data', function (LaravelExcelWorksheet $sheet) {
$sheet->fromArray($this->getDataForExport());
});
});
}
Источник использует другой пакет под названием laravel-excel, но я не могу понять, как обновить логика, поэтому она обрабатывается меньшими частями и действительно работает.
Может ли кто-нибудь помочь разобраться в логике экспорта больших наборов результатов в CSV с помощью пакета Yajra Laravel DataTables?
$this->getDataForExport()
снаружи и передать его с использованием при каждом закрытии. Это не помогает, что он находится в закрытии, поскольку он просто собирается пережевывать память. Возможно, вам придется подумать о том, чтобы сделать это по-другому, поскольку, когда у вас есть 20 тысяч строк, они будут продолжать ломаться. - person Lawrence Cherone   schedule 20.12.2017var_dump($this->getDataForExport())
, и даже это привело бы к той же ошибке сервера 500 с пустым ответом. Я даже пытался углубиться в эти методы из пакета, чтобы посмотреть, смогу ли я выяснить, что нужно улучшить, но часто застревал. Даже у getDataForExport есть закрытия для сопоставления ajaxResponseData со столбцами экспорта, и это просто кошмар. Я думал, что добился успеха с собственной обработкой на стороне сервера DataTables для других проектов, но решил, что попробую решить Laravel, прежде чем отказываться от него. - person Jeff Jenkins   schedule 20.12.2017