Exportar dados filtrados em CAKEPHP 3

15/10/2021

0

Boa tarde povo, estou com o seguinte problema: Na aplicação tenho uma tela de paginação dos resultados e possuo uma parte para o usuário aplicar os filtros, campos que o usuário pode preencher para trazer apenas o que for do seu interesse na página de listagem.
Utilizando como exemplo a entidade Colaboradores, segue o seguinte fluxo:

1º Usuário informa os dados no Filtro (Nome, CPF, Data Nascimento, etc.. );
2º Com base nesses dados informados é retornado todos os registros com base nos campos preenchidos.

Eu já tenho um que exporta todos os dados da tabela, porém preciso adaptar ele, para que quando o usuário filtrar e exportar em Excel, apenas o resultado que está sendo exibido na tela.

Resumindo... eu gostaria de exportar apenas os resultados filtrados pelo usuário e não todos os dados da tabela.
Desde já agradeço qualquer apoio.

O código abaixo exporta todos os dados da tabela
public function export(){
        try {
            $this->response = $this->response->withDownload('DADOS_EXPORTADOS.csv');
            $_header = ['Colaborador', 'Data', 'Nivel', 'Classe', 'Grau', 'Promocao'];

            $connection = ConnectionManager::get('default');
            $results = $connection->execute("
            SELECT  c.name,
                    DATE_FORMAT(l.date,GET_FORMAT(DATE,'EUR')),
            CASE
                WHEN l.level = 1 THEN 'N1'
                WHEN l.level = 2 THEN 'N2'
                WHEN l.level = 3 THEN 'N3'
                WHEN l.level = 4 THEN 'N4'
            END AS Level ,
            CASE
                WHEN l.class = 1 THEN 'A'
                WHEN l.class = 2 THEN 'B'
                WHEN l.class = 3 THEN 'C'
            END AS Classe,
            CASE
                WHEN l.degree = 1 THEN 'I'
                WHEN l.degree = 2 THEN 'II'
                WHEN l.degree = 3 THEN 'III'
                WHEN l.degree = 4 THEN 'IV'
                WHEN l.degree = 5 THEN 'V'
                WHEN l.degree = 6 THEN 'VI'
                END AS Grau ,
                IFNULL(p.title, '  -  ')
            FROM levelings l
            INNER JOIN collaborators c
            ON l.collaborator_id = c.id
            LEFT JOIN promotions p
            ON l.promotion_id = p.id
            WHERE l.flag = 1;
            ")->fetchAll();

            $_serialize = 'results';

            $this->viewBuilder()->setClassName('CsvView.Csv');
            $this->set(compact('results', '_serialize', '_header', '_extract'));
        } catch (\Exception $exc) {
            $this->Flash->error(__('Falha na conexão! Contate o administrador.'));
            return $this->redirect($this->referer()); #volta para local de origem
        }
    }
Yuri Aguiar

Yuri Aguiar

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar