Как отправить коллекцию в виде файла Excel в laravel - PullRequest
0 голосов
/ 30 октября 2018

Я использую Laravel Excel 3.1 из https://laravel -excel.maatwebsite.nl / и пытаюсь выяснить, существует ли простой способ просто отобразить коллекцию в виде файла Excel.

В моем контроллере у меня есть код, который генерирует запрос БД и помещает его в представление. Я хотел бы дать пользователю возможность загружать данные в этом представлении в виде документа Excel. Код, используемый для создания представления, не прост, и он основан на множестве входных запросов.

В моем PatientsController.php у меня есть

public function excelExport(Request $request)
{
    $params = $this->getQueryParams($request);
    $pts = $this->createIndexCollection($request, $params);

    return Excel::download(new PatientsExport, 'patients.xlsx');
}

Я бы хотел передать уже вычисленную коллекцию $pts команде загрузки. Это возможно?

PatientsExport копируется прямо из документации.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

вам нужно создать класс для экспорта коллекции, чтобы добиться этого, создайте файл в app / Export Patientsexport.php и добавьте это содержимое

namespace App\Export;

use App\PatientsExport;
use Maatwebsite\Excel\Concerns\FromCollection;

class PatientsExports implements FromCollection
{
    public function collection()
    {
        return PatientsExport::all();
    }
}

теперь вы можете получить доступ в вашем контроллере

use App\PatientsExport\PatientsExports;
public function excelExport(Request $request)
{
    $params = $this->getQueryParams($request);
    $pts = $this->createIndexCollection($request, $params);
    return Excel::download(new PatientsExports, 'patients.xlsx');
}
0 голосов
/ 30 октября 2018

Пожалуйста, смотрите этот пример из официальной документации:

https://laravel -excel.maatwebsite.nl / 3,1 / экспорт / collection.html

class PatientsExport implements FromCollection
{
    private $your_collection;

    public function __construct($pts) {
        $this->your_collection = $pts;
    }

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

}

и попробуйте:

public function excelExport(Request $request) { 
{
    $params = $this->getQueryParams($request);
    $pts = $this->createIndexCollection($request, $params);
    return Excel::download(new PatientExport($pts), 'invoices.xlsx');
}
...