В любом бизнес-приложении рано или поздно просят две вещи: «скачать как Excel» и «дайте PDF-счёт». В Laravel это решают пакеты: Laravel Excel (maatwebsite/excel) для таблиц, DomPDF или Browsershot для PDF.

bash
composer require maatwebsite/excel
composer require barryvdh/laravel-dompdf

Класс экспорта

Экспорт — это класс, который перечисляет свои возможности через интерфейсы. FromQuery отдаёт данные, WithHeadings — первую строку, WithMapping — формат каждой строки.

php
<?php

namespace App\Exports;

use App\Models\Order;
use Illuminate\Database\Eloquent\Builder;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;

class OrdersExport implements FromQuery, WithHeadings, WithMapping
{
    use Exportable;

    public function __construct(private int $year) {}

    public function query(): Builder
    {
        return Order::query()
            ->with('customer')
            ->whereYear('created_at', $this->year);
    }

    public function headings(): array
    {
        return ['ID', 'Customer', 'Total', 'Date'];
    }