问题描述
我正在使用 https://docs.laravel-excel.com/3.1/exports。我在导出 500,000 行时遇到问题。
我正在使用队列来处理导出。它适用于 10K 记录。在处理 500,000 条记录并运行 PHP artisan queue:work --timeout=86000
以执行作业时,正在发生注释。
知道如何使 maatwebsite excel 为 500,000 条记录导出工作吗?附上了我的代码快照。
我的控制器
public function getDownload(Request $request)
{
(new TagsExport)->queue('exports/tags' . date('Y-m-d H_i') . '.xlsx');
echo back()->withSuccess('Export started!');
}
我的标签导出类
<?PHP
namespace App\Admin\Exports;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\Withheadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithCustomQuerySize;
use Tag;
class TagsExport implements FromQuery,WithTitle,Withheadings,WithMapping,WithCustomQuerySize
{
use Exportable;
/**
* Get the sheet title
*
* @return string
*/
public function title(): string
{
return 'Tags';
}
/**
* Get the header rows
*
* @return array
*/
public function headings(): array
{
return [
'id','Name',];
}
public function query()
{
return Tag::query();
}
public function querySize(): int
{
$query = Tag::query();
$size = $query->count();
return $size;
}
public function chunkSize(): int
{
return 1000;
}
/**
* Get the mapped results
*
* @param Company $company
* @return array
*/
public function map($company): array
{
return [
$company->id,$company->name,];
}
}
解决方法
如果您的代码在 10.000 个寄存器上运行良好,但在 500.000 行时中断,我认为生成整个导出文件所需的时间比您预期的要多,对您来说似乎什么也没发生,但是队列确实发生了没有足够的时间来处理这一切。
您真的需要一个巨大的单个文件吗?你不能把你的转储分成多张纸吗?
[1~25000]
[25001 ~ 50000]
[50001 - 100000]
And so on...
这也可能与 PHP 允许使用的内存量有关(在这种情况下没有足够的内存)尝试在 php.ini 中更改它并再试一次。
希望对你有帮助=)