Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Ordernar DataGrid campo setTransformer Dae galera. Seguinte, eu tenho uma datagrid com campo com setTransformer. Esse campo tem toda uma logica para o calculo de dias. Como no código abaixo, o campo vai se basear na data de cadastro, e conforme a situação ele vai subtrair uma data por outra e gerar um numero inteiro de dias. public function retornaDias($campo, $object, $row) { $string = new Strings...
GE
Ordernar DataGrid campo setTransformer  
Fechado
Dae galera.

Seguinte, eu tenho uma datagrid com campo com setTransformer.
Esse campo tem toda uma logica para o calculo de dias.
Como no código abaixo, o campo vai se basear na data de cadastro, e conforme a situação ele vai subtrair uma data por outra e gerar um numero inteiro de dias.

public function retornaDias($campo, $object, $row) { $string = new StringsUtil; $dias = 0; if($object->data_cancelamento){ $dias = $string->subtrair_datas($object->data_cadastro, $object->data_cancelamento); } elseif($object->data_encerramento){ $dias = $string->subtrair_datas($object->data_cadastro, $object->data_encerramento); } else { $dias = $string->subtrair_datas($object->data_cadastro, date('Y-m-d')); } $campo = $dias; return $campo; }


Minha dúvida é como ordenar a datagrid pelo resultado da setTransformer?

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (3)


NC

E se ao invés de usar o settransformer no onReload quando envia o campo para o DataGrid você criar esse campo? Acho que ele deve aceitar ordenar.

Só um chute.
GE

Daew

eu resolvi jogando a logica para a consulta do banco, ficando desta maneira:

if (isset($newparam['order']) AND $newparam['order'] == 'data_cadastro') { $newparam['order'] = '(select CASE WHEN data_cancelamento is not null THEN data_cancelamento - data_cadastro WHEN data_encerramento is not null THEN data_encerramento - data_cadastro ELSE current_date - data_cadastro END as dias from ticket as t where ticket.id = t.id)'; }


Alguém sabe de alguma solução mais elegante?
PD

O setTransformer() atua somente em tela.
Na tela visualizamos somente uma "fatia" dos dados.
Então, a ordem ideal fica a cargo do BD mesmo.

Mais elegante que isso seria ter uma coluna no BD
com o resultado pronto, ou uma function no BD
que calculasse isso, para não precisar ficar o CASE
no código.

Atenciosamente,