【发布时间】:2018-06-03 04:34:31
【问题描述】:
我已经接管了一个使用 Yajra DataTables 包的 Laravel 项目。该表呈现良好,我能够添加一个 CSV/Excel 导出按钮,该按钮在大多数情况下都可以正常工作。
我遇到的问题是我们的应用程序有时会输出 10k 条记录,当我尝试将完整的数据集导出到 CSV 时,它最终会在浏览器中产生一个空白页面并产生 500 内部服务器错误(空响应) 一段时间后。
我已经尝试更新所有 Laravel 和 Laravel DataTables 包,并尝试使用各种论坛帖子中的代码来尝试使用可能会分块处理的逻辑来覆盖包的 buildExcelFile(),但我总是得到相同的结果。
原始方法(source):
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 的包,但我不知道如何更新逻辑,以便它以更小的块处理并实际工作。
谁能帮助弄清楚使用 Yajra Laravel DataTables 包将大型结果集导出到 CSV 的逻辑?
【问题讨论】:
-
查看文档和源代码,chunk 选项似乎仅可用于导入:( 尝试将
$this->getDataForExport()放在外面并在每个闭包上使用它并通过它,它没有帮助它在关闭,因为它只会消耗内存。您可能需要考虑以不同的方式进行操作,因为当您有 20k 行时,它会继续中断。 -
谢谢@LawrenceCherone。我试图
var_dump($this->getDataForExport()),即使这样也会产生相同的 500 服务器错误和空白响应。我什至尝试从包中深入研究这些方法,看看我是否能找出需要改进的地方,但经常卡住。甚至 getDataForExport 也有用于将 ajaxResponseData 映射到导出列的闭包,这只是一场噩梦。我以为我在其他项目的本地 DataTables 服务器端处理方面取得了成功,但我想在放弃它之前尝试解决 Laravel。
标签: php laravel datatables laravel-excel