jcadima
3/20/2019 - 8:44 PM

Laravel Excel Export Date Range



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 Excel
composer require maatwebsite/excel

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

2) Generated Export Class will look like, after modifications:
<?php

namespace App\Exports;

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

class RegistrationsExportByRange implements FromCollection, WithMapping, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        $startDate = request()->input('startDate') ;
        $endDate   = request()->input('endDate') ;
        return Registration::with('user')
            ->whereBetween('event_date', [ $startDate, $endDate ] )
            ->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 DATE RANGE
|---------------------------------
*/
public function export_input( Request $request ) {
    // dd($request->all() ) ;
    return Excel::download( new RegistrationsExportByRange(), 'registrations_input.xlsx') ;
}



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



6) In Blade View
<form method="get" action="{{ route('registrations.export_input') }}">
    <div class="form-group">
        <label>Start Date:</label>
        <div class="input-group mb-3">
            <input id="startDate" name="startDate" width="276" />
        </div>
    </div>

    <div class="form-group">
        <label>End Date:</label>
        <div class="input-group mb-3">
            <input id="endDate"  name="endDate" width="276" />
        </div>
    </div>

    <div class="form-group">
        <div class="input-group mb-3">
            <button type="submit" class="btn btn-primary">Export By Date Range</button>
        </div>
    </div>

</form>