Estou usando o Maatwebsite para gerar um relatório em excel, estou enviando os filtros para o construtor pra fazer o relatório. Só que na hora de fazer o download do arquivo o excel vem vazio (apenas com o nome das colunas):
Estrutura:
View do Relatório
Action do botão 'Gerar Excel'
function criarExel(){
data = {
regional: $("#regional").val(),
congregacao: $("#congregacao").val()
}
$.ajax({
type: "GET",
url: "/relatorios/membros-c/excel",
context: this,
data: data,
success: function(d) {
window.open('/relatorios/membros-c/excel',d);
},
error: function(error) {
console.log(error);
}
});
}
Controller para gerenciar os relatorios:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Relatorios\Excel\Membros;
use App\Relatorios\Excel\Nmembros;
use Maatwebsite\Excel\Facades\Excel;
class Excel_Controller extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
/**
* @return \Illuminate\Support\Collection
*/
public function nMembrosExcel()
{
return Excel::download(new Nmembros, 'Relatorio_Não_Membros.xlsx');
}
public function membrosCExcel(Request $request) /* O PROBLEMA COMEÇA AQUI*/
{
return Excel::download(new Membros($request), 'Relatorio_Membros.xlsx');
}
/**
* @return \Illuminate\Support\Collection
*/
}
Classe Membros:
<?php
namespace App\Relatorios\Excel;
use App\Models\Cadastro\Pessoa;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
class Membros implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents
{
/**
* @return \Illuminate\Support\Collection
*/
protected $congregacao;
protected $regional;
public function __construct($request)
{
$this->congregacao = $request->congregacao;
$this->regional = $request->regional;
}
public function collection()
{
return Pessoa::where('situacao_membro', 'MC')->where('congregacao_id', $this->congregacao)->where('regional_id',$this->regional)->get(['nome','telefone','celular','data_nasc']);
}
public function headings(): array
{
return [
'Nome',
'Data Nascimento',
'Telefone',
'Celular'
];
}
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
$cellRange = 'A1:W1'; // All headers
$event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(12);
},
];
}
}
Se esqueço do request e coloco o valor diretamente o arquivo excel vem com os dados completos:
public function collection()
{
return Pessoa::where('situacao_membro', 'MC')->where('congregacao_id', 1)->where('regional_id',1)->get(['nome','telefone','celular','data_nasc']);
}
O curioso e que estou usando o Debugbar e o valor de $this->regional e $this->congregacao é exatamente 1:
public function collection()
{
\Debugbar::info($this->regional);
\Debugbar::info($this->congregacao);
return Pessoa::where('situacao_membro', 'MC')->where('congregacao_id', $this->congregacao)->where('regional_id',$this->regional)->get(['nome','telefone','celular','data_nasc']);
}
Já li a documentação do Maatwebsite, várias duvidas em fóruns mas não encontrei solução.
Se alguém puder dizer onde esta o erro agradeço!
Obs: pouco tempo com laravel e PHP.