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>