Laravel Excel не работает в очереди

У меня есть следующий экспорт laravel excel:

namespace App\Admin\Exports\Items;

use App\Flare\Models\Item;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;

class ItemsExport implements FromQuery, ShouldQueue {

    use Exportable;

    public function query() {
        return Item::all();
    }
}

Который вызывается в этом действии контроллера:

public function export() {

    (new ItemsExport)->queue('items.xlsx')->chain([
        new ExportItemsEmail(auth()->user()),
    ]);

    return redirect()->back()->with('success', 'File will be emailed to you once done.');
}

Для этой таблицы более 5 тыс. записей

Horizon корректно отправляет задание, но одно из них не выполняется:

Maatwebsite\Excel\Jobs\AppendQueryToSheet

ArgumentCountError: Слишком мало аргументов для функции Illuminate\Support\Collection::get(), передано 0 › в /home/person/Documents/flare/vendor/maatwebsite/excel/src/Jobs/AppendQueryToSheet.php в строке 96 и не менее 1 ожидается в /home/person/Documents/flare/vendor/laravel/framework/src/Illuminate/Collections/Collection.php:407

Разве это не то, как вы бы поставили в очередь большой экспорт, который должен разбивать результаты запроса?

Мне нужно добавить задание, поэтому я не могу просто сохранить его. Я делаю что-то не так?


person TheWebs    schedule 16.06.2021    source источник
comment
Может быть, не использовать Item::all(), а использовать Item::query()? Я не уверен во внутренней работе того, что здесь происходит, но если это попытка связать функции в классе Builder, в конечном итоге выполняя ->get() для завершения запроса, Item::all() не будет работать, так как возвращает Collection.   -  person Tim Lewis    schedule 16.06.2021
comment
Вы пытались использовать ->get() на своем Item::all()?   -  person Ezra Lazuardy    schedule 16.06.2021
comment
@TimLewis ::query() был прав, однако теперь задание не делится на несколько заданий и, следовательно, время ожидания истекает.   -  person TheWebs    schedule 16.06.2021
comment
@EzraLazuardy Вот как была вызвана эта ошибка ... all() возвращает Collection, а ->get() на Collection требует как минимум 1 аргумент. ::all() здесь просто объективно неправильно. @TheWebs К сожалению, эта часть выходит за рамки моих знаний; Я никогда не использовал черту ShouldQueue для laravel-excel, извините. Надеюсь, кто-то еще может помочь ????   -  person Tim Lewis    schedule 16.06.2021
comment
@TimLewis Ну, основная проблема решена, поэтому я могу ответить и закрыть этот вопрос. Спасибо   -  person TheWebs    schedule 16.06.2021


Ответы (1)


Правильный способ избежать ошибки — использовать Item::query(), так как all вернет коллекцию.

person TheWebs    schedule 16.06.2021