使用Laravel Excel Export(版本3.1)导出大量数据

时间:2019-02-08 15:14:03

标签: excel laravel export

我正在尝试使用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个内部服务器错误。

有人可以帮我吗?

非常感谢您。

1 个答案:

答案 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中了解更多信息。