jcadima
3/20/2019 - 8:27 PM

Laravel Excel Export with table relationships


https://docs.laravel-excel.com/3.1/getting-started/installation.html
https://stackoverflow.com/questions/53301568/maatwebsite-laravel-excel-exports-blank-excel-when-using-inputget-in-model
<?php


0) Install Laravel Excell
composer require maatwebsite/excel

1) create Export Controller:
php artisan make:export RegistrationsExportMapping --model=Registration

2) Generated Export Class will look like:
namespace App\Exports;

use Carbon\Carbon;
use App\Registration;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;

class RegistrationsExportMapping implements FromCollection, WithMapping, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        //returns Data with User data, all user data, not restricted to start/end dates
        return Registration::with('user')->get();
    }

    public function map($registration) : array {
        return [
            $registration->id,
            $registration->user->email,
            $registration->user->key_num,
            $registration->user->plus_one,
            Carbon::parse($registration->event_date)->toFormattedDateString(),
            Carbon::parse($registration->created_at)->toFormattedDateString()
        ] ;


    }

    public function headings() : array {
        return [
           '#',
           'Email',
           'Key#',
           'Plus One',
           'Event Date',
           'Created At'
        ] ;
    }
}



3) RegistrationsController export method:
    /*
    |----------------------------------------------
    | EXPORT MAP RELATIONSHIPS WITH 'REGISTRATIONS'
    |----------------------------------------------
    */
    public function export_mapping() {
        return Excel::download( new RegistrationsExportMapping(), 'registrations.xlsx') ;
    }

5) in web.php
    Route::get('registrations/export_mapping', 'RegistrationsController@export_mapping')->name('registrations.export_mapping') ;



6) In Blade View
<a href="{{ route('registrations.export_mapping') }}" class="btn btn-dark fright">Export Registration with relational data <i class="fas fa-download"></a>