Я пытаюсь экспортировать большие данные, используя Laravel Excel в очереди . Это работает нормально, если я удаляю метод заголовков из класса экспорта. Если я попытаюсь включить метод заголовков, это даст мне исключение.
FatalThrowableError: Return value of App\Exports\DataTablesExport::headings() must be of the type array, null returned in DataTablesExport.php:72
В моем контроллере
/**
* @var $query \Illuminate\Database\Eloquent\Builder
*/
$columns = array_keys($query->first()->toArray());
(new DataTablesExport($query, $columns))->queue($file)->chain([
new NotifyAdminOfCompletedExport(request()->user(), $file)
]);
В классе экспорта
<?php
namespace App\Exports;
use Illuminate\Bus\Queueable;
use Illuminate\Database\Connection;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithCustomQuerySize;
class DataTablesExport implements FromQuery, WithCustomQuerySize, WithHeadings, ShouldQueue
{
use Queueable, SerializesModels, Exportable, InteractsWithQueue;
/**
* @var Builder
*/
private $query;
private $columns;
/**
* DataTablesExport constructor.
* @param Builder $query
* @param array $columns
*/
public function __construct(Builder $query, array $columns)
{
$this->query = $query;
$this->columns = $columns;
}
/**
* @inheritDoc
*/
public function query()
{
return $this->query;
}
/**
* @inheritDoc
*/
public function querySize(): int
{
return $this->query->count();
}
public function __sleep()
{
return []; //Pass the names of the variables that should be serialised here
}
public function __wakeup()
{
//Since we can't serialize the connection we need to re-open it when we unserialise
$this->connection = app(Connection::class);
}
/**
* @return array
*/
public function headings(): array
{
return $this->columns;
}
}
Драйвер очереди: Redis
Сообщение об исключении из таблицы laravel failed_jobs (Symfony \ Component \ Debug \ Exception \ FatalThrowableError: Возвращаемое значение App \ Exports \ DataTablesExport :: headings () должен иметь тип массива, ноль возвращается в DataTablesExport. php: 72)
Эта реализация работает, если я удалил метод заголовков из класса DataTableExport
Есть предложения по добавлению заголовков в файл Excel, который я пытаюсь экспортировать?