PHP Неустранимая ошибка: допустимый размер памяти 268435456 байт исчерпан laravel excel - PullRequest
0 голосов
/ 25 мая 2020

У меня есть следующий код. Я могу сгенерировать Excel с помощью опции laravel -excel в очереди, когда количество записей меньше. Но при создании Excel с большим количеством записей я получаю ошибку PHP Fatal error: Allowed memory size of 268435456 bytes exhausted. Я использую "maatwebsite/excel": "^3.1"

<?php

    namespace App\Exports;

    use App\Invoice;
    use Illuminate\Contracts\View\View;
    use Maatwebsite\Excel\Concerns\FromView;
    use Maatwebsite\Excel\Concerns\ShouldAutoSize;
    use Maatwebsite\Excel\Concerns\WithEvents;
    use Maatwebsite\Excel\Events\AfterSheet;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Maatwebsite\Excel\Concerns\Exportable;

    class ReportsExport implements FromView, ShouldAutoSize, WithEvents, ShouldQueue
    {
    use Exportable;

    protected $query;
    protected $viewFile;

    public function __construct($query, $viewFile)
    {
        $this->query = $query;
        $this->viewFile = $viewFile;
    }

    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $cellRange = 'A1:W1'; // All headers
                $event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
                $event->sheet->getDelegate()->freezePane('A2');
            },
        ];
    }

    public function view(): View
    {
        return view($this->viewFile, [
            'samples' => $this->query
        ]);
    }
    }

в файле контроллера

    $startDate = '2020-01-01';
    $endDate = '2020-05-01';
    $generatedFileName = uniqid() . '_invoices.xlsx';

    (new ReportsExport(SampleResponses::sampleFields($startDate, $endDate)->get(), 'exports.sample-with-responses'))->store($generatedFileName);

Я сохраняю файл, чтобы отправить его как вложение. Кто-нибудь может мне помочь, пожалуйста.

...