Экспорт данных в Excel с использованием очереди в laravel

Здравствуйте, я пытаюсь экспортировать файл Excel с помощью очереди laravel. Я интегрировал maatwebsite для того же.

Вот что я сделал до сих пор

Контроллер

public function export()
{
    $this->dispatch(new ExportDistributorJob([]));
    Session::flash('success','Data is being exported to excel file.');
    return redirect()->back();
}

Работа

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use App\Model\Products;
use Excel;

class ExportDistributorJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(array $request)
    {
        $this->queue = 'default'; 
        $this->data = $request;
    }

    public function handle()
    {   
        $data = array(
                       'Name' => 'John', 
                       'City' => 'Washington'
                    );

        return Excel::create('invoice', function($excel) use ($data) {
        $excel->sheet('mySheet', function($sheet) use ($data)
        {
            $sheet->fromArray($data);
        });
        })->download('xlsx');

    }
} 

?>

Когда я выполняю программу. Он хранит данные в таблице заданий и пытается выполнить 3 раза, после чего получает

Ошибка MaxAttemptsExceededException.

Я не могу экспортировать данные в файл Excel с помощью очереди.

 QUEUE_DRIVER=database 

Любая помощь будет принята с благодарностью.
Спасибо.


person bdb    schedule 15.10.2018    source источник
comment
Ваша работа выдает ошибку, после трехкратного сбоя. Прочтите laravel-excel.maatwebsite.nl/3.1/exports/collection.html здесь вы можете увидеть, как экспортировать коллекцию. Вы также можете использовать очередь Excel laravel-excel.maatwebsite.nl/3.1/exports /queued.html   -  person Thijs Bouwes    schedule 15.10.2018
comment
@ThijsBouwes Он пытается выполнить 3 раза, но почему не экспортирует данные в csv? Если я изменю QUEUE_DRIVER для синхронизации, он будет работать нормально.   -  person bdb    schedule 15.10.2018
comment
Можете ли вы предоставить журнал или исключение?   -  person Thijs Bouwes    schedule 15.10.2018
comment
После трехкратного выполнения в журнале отображается ошибка - App \ Jobs \ ExportDistributorJob выполнялись слишком много раз или выполнялись слишком долго. Возможно, задание уже истекло.   -  person bdb    schedule 15.10.2018
comment
Какую версию пакета используете?   -  person Thijs Bouwes    schedule 15.10.2018
comment
Это maatwebsite / excel ~ 2.1.0, а версия laravel - 5.6.   -  person bdb    schedule 15.10.2018
comment
Основываясь на синтаксисе, я думаю, вы используете 2.1.0, можете ли вы попробовать заменить ->download('xlsx') на ->store('xlsx') см. laravel-excel.maatwebsite.nl/2.1/export/store.html для получения дополнительной информации.   -  person Thijs Bouwes    schedule 15.10.2018
comment
Я изменил его на магазин, но ничего не изменилось.   -  person bdb    schedule 15.10.2018
comment
Удастся ли тебе решить эту проблему? задание выполняется, выполняется вставка обновления, но Excel не загружается   -  person H45H    schedule 20.09.2019


Ответы (1)


Класс Excel неправильно импортирован из пространства имен пакета.

use Maatwebsite\Excel\Excel;

Также метод ExportDistributorJob::handle возвращает HTTP-ответ и завершает скрипт

В контексте работы это бесполезно, поскольку она резко завершает работу. Вместо этого вам следует сохранить таблицу.

public function handle()
{   
    $data = array(
                   'Name' => 'John', 
                   'City' => 'Washington'
                );

    return Excel::create('invoice', function($excel) use ($data) {
        $excel->sheet('mySheet', function($sheet) use ($data) {
            $sheet->fromArray($data);
        });
    })->store('xlsx', storage_path('excel/exports'));

}
person Oluwafemi Sule    schedule 25.06.2020