Экспорт большого объема данных с помощью Laravel Excel Export (версия 3.1) - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь экспортировать большой объем данных с помощью Laravel Excel Export, версия 3.1, но мне всегда не хватает памяти (мой лимит 512M).

В классе экспорта:

class ExcelExport implements FromQuery
{
    use Exportable;


    public function query()
    {
        return DB::table('myTable')->orderBy('date');
    }

}

В контроллере:

Excel::store(new ExcelExport(), 'myFile.xlsx');

Из официальной документации я вижу следующее:

"С помощью концерна FromQuery мы можем подготовить запрос на экспорт. За кулисами этот запрос выполняется частями. "

Но, похоже, он не работает должным образом.

Является ли использование Query Builder проблемой?

Кроме того,Есть ли способ установить размер чанка?

Я попытался использовать в запросе предложение limit, например:

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 голосов
/ 08 февраля 2019

Вы можете попробовать неявную очередь экспорта.

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');

Таким образом, несколько работ будут объединены в цепочку, чтобы разделить процесс на части.

Подробнее в * 1010 Docs *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...