Создание CSV-файла с Maatwebsite / Laravel-Excel, как сделать заголовки возвращает динамический массив - PullRequest
2 голосов
/ 24 июня 2019

В lasvel 5.8 при создании CSV-файла я использую плагин https://github.com/Maatwebsite/Laravel-Excel, и он работает нормально, но так же, как я использую метод заголовков для генерации заголовков https://docs.laravel -excel.com / 3.1 / exports / mapping.html

Мне нужны заголовки в зависимости от набора результатов, который я получил из базы данных:

<?php

namespace App\Exports;

use Auth;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class exportSearchResults implements FromCollection, WithHeadings
{
    public function collection()
    {
        $searchResultRows = SearchResult
            ::getByUserList($this->user_list_id)
            ->select( 'source_id' )
            ->groupBy( 'source_id' )
            ->orderBy('source_id', 'asc')
            ->get()
            ->toArray();
            ...
        return $searchResultRows;
    }

    public function headings(): array
    {
        return [
            'field',
            'value',
        ];
        // I need Somehow to return content of this array based on $searchResultRows array in collection method
    }

}

Есть ли такой способ?

1 Ответ

2 голосов
/ 24 июня 2019

Вы можете использовать что-то вроде этого:

<?php

namespace App\Exports;

use Auth;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class exportSearchResults implements FromCollection, WithHeadings
{
    private $searchResultRows;

    public function collection()
    {
        return $this->searchResultRows;
    }


    public function headings(): array {
         $this->searchResultRows = SearchResult::getByUserList($this->user_list_id)
            ->select( 'source_id' )
            ->groupBy( 'source_id' )
            ->orderBy('source_id', 'asc')
            ->get()
            ->toArray();
            ...
        if ($this->searchResultRows ...){
        return [
            'field',
            'value',
        ];
        } else {
          return ...
        }
    }

}
...