{parts/gtag_head.html} {parts/gtag_body.html}
Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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,