我正在尝试使用3.1版的Laravel Excel Export导出大量数据,但是我总是内存不足(我的限制是512M)。
在导出类中:
class ExcelExport implements FromQuery
{
use Exportable;
public function query()
{
return DB::table('myTable')->orderBy('date');
}
}
在控制器中:
Excel::store(new ExcelExport(), 'myFile.xlsx');
从官方文档中,我看到以下内容:
“通过使用FromQuery关注,我们可以为导出准备查询。在后台,该查询以块的形式执行。”
但是它似乎没有按预期工作。
使用查询生成器是否有问题?
还可以设置块大小吗?
我试图在查询中使用限制子句,如下所示:
public function query()
{
return DB::table('myTable')->orderBy('date')->limit(1000);
}
但是它不起作用:似乎没有使用该限制。
我试图在try ... catch块中捕获错误:
try{
Excel::store(new ExcelExport(), 'myFile.xlsx');
}
catch(\Exception $e){
Log::error($e->getMessage());
}
但是,它仍然没有捕获任何异常:我看到的只是500个内部服务器错误。
有人可以帮我吗?
非常感谢您。
答案 0 :(得分:1)
您可以尝试隐式导出队列。
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
class ExcelExport implements FromQuery, ShouldQueue
{
use Exportable, SerializesModels;
public function query()
{
return DB::table('myTable')->orderBy('date');
}
}
像这样调用出口:
(new ExcelExport)->store('myFile.xlsx');
通过这种方式,多个作业将被链接起来,以分块该过程。
在docs中了解更多信息。