public function geraRelatorio(Request $request) { $address = new EnderecosCapa(); $address = $address->getCapa($request, 'App\\Models\\Cliente'); $clientes = Cliente::with('contatos')->with(['vendas' => function ($v) use($address) { $v->with('lancamentos'); $v->with(['venda_itens' => function ($vi) { $vi->with('produto'); }]); $v->whereBetween('data_venda', [setDataBR($address['data_inicial']), setDataBR($address['data_final'])]); }])->join('enderecos', function ($q) use($address) { $q->on('enderecos.enderecavel_id', '=', 'clientes.id'); $q->where('enderecos.enderecavel_type', '=', 'App\\Models\\Cliente'); $q->whereIn('estado', $address['estados']); $q->whereIn('cidade', $address['cidades']); $q->whereIn('bairro', $address['bairros']); })->select('enderecos.estado', 'enderecos.cidade', 'enderecos.bairro', 'enderecos.logradouro', 'enderecos.numero', 'enderecos.complemento', 'enderecos.cep', 'clientes.*')->orderBy('enderecos.estado', 'asc')->orderBy('enderecos.cidade', 'asc')->orderBy('enderecos.bairro', 'asc')->orderBy('enderecos.logradouro', 'asc')->orderBy('enderecos.numero', 'asc')->orderBy('clientes.fantasia', 'asc')->orderBy('clientes.nome_razao', 'asc')->get(); //fim join enderecos return view('clientes/relatorios/relatorio_completo', compact('enderecos', 'clientes', 'address')); }