在Laravel-Excel

时间:2017-11-02 15:00:31

标签: laravel chunks laravel-excel

使用此代码,我可以导出到excel MyModel的数据,工作正常:

Excel::create('Filename', function ($excel) {
                $excel->sheet('Contratos', function ($sheet) {
                    $datos = MyModel::select([
                        'id', 'data'])
                        ->get();
                    $sheet->fromArray($datos, null, 'A1', false, false);
                });
            })->export('xls');

但我需要将数据块化以生成excel,因为在另一个模型中我有太多数据(如9000条记录)。我看到了一些像这样的例子:

http://www.thecreativeroad.com/blog/export-large-dataset-using-laravel-excel-using-laravel-db-chunk

$data = $user->query();
    try{
        return Excel::create('FileName', function($excel) use($data){

        $data->chunk(100, function ($users) use($excel) {
            $collection = $this->transformCollection($users);

            $excel->sheet('OrgSubUserList', function($sheet) use($collection){
                $sheet->fromModel($collection, null, 'A1', true);
            });
        });

        })->export('xls');
    }
    catch(Exception $e)
    {
        return false;
    }

但是我无法想象如何将它应用到我的代码中,我在工作表上的顺序与文件本身之间存在混淆。任何提示?

1 个答案:

答案 0 :(得分:0)

将false作为第三个参数传递给chunk()以禁用排队

$data = [];
Excel::filter('chunk')->load($path)->chunk(1000, function ($results) use (&$data) {
    foreach ($results as $row) {
        $data[] = $row;
    }
}, $shouldQueue = false);
return $data;