kohana get&set => d/m/Y

21 views
Skip to first unread message

Douglas J.A.M

unread,
Jun 20, 2012, 9:49:23 AM6/20/12
to kohan...@googlegroups.com
Bom dia galera,

   Estou tentando aqui aperfeiçoar o kohana para uso proprio mas cheguei numa barreira...

Bem o que eu quero é fazer com que o kohana para a gui trabalhe com o formato de data d/m/Y e para o sgbd Y-m-d, não quero usar timestamp pois não me atende pela restrição de 1970.

Então fui lá, criei uma classe ORM para sobrescrever uns metódos, até aí fiz o __get e __set, tranquilo funcionaram...

Mas ai fui fazer testes mais a fundo, e vi que quando se usa o ORM::tal($id=null)->find_all(); não passa pelo __get, :@ odio eterno hehe, ai fui ver a função,
mas ela é muito engessada, dando assim muito trabalho para modifica-la assim não rola, alguem sabe uma solução viável para conseguir fazer essa
proeza que quero funcionar globalmente sem que eu use um columns ou get?

public function __get($column) {
$retorno = parent::__get($column);

if (is_object($retorno) == true && $retorno instanceof ORM && $retorno->_table_columns[$column]['data_type'] == 'datetime') {
// passo a data para o formato d/m/Y
}
return $retorno;
}
}

Atenciosamente,

Daniel Ribeiro Gomes

unread,
Jun 20, 2012, 9:52:41 AM6/20/12
to kohan...@googlegroups.com
$date = DateTime::createFromFormat('Y-m-d', $retorno->_table_columns[$column]['data_type'])->format('d/m/Y');

Daniel Ribeiro Gomes Pereira



--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/sXmwRjb3IWIJ.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.

Douglas J.A.M

unread,
Jun 20, 2012, 9:59:49 AM6/20/12
to kohan...@googlegroups.com
A conversão eu frago, falo para isso ficar automatico e genérico na função _load_values

Daniel Ribeiro Gomes

unread,
Jun 20, 2012, 10:01:43 AM6/20/12
to kohan...@googlegroups.com
Bom, a sobreescrita do __get deveria funcionar.

Qual o erro?

Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931



felipe bastos

unread,
Jun 20, 2012, 10:05:17 AM6/20/12
to kohan...@googlegroups.com

ORM::factory("seumodel") ..

ORM::factory("produto") .. ou new Model_Produto()

Problema com Timestamp nao procede, antes de 1970 nao existia computador :)  (isso é um problema na informatica) basta usar time() e todas as outras funcoes de data .. estude mais o userguide

O restante nao lembro

--

felipe bastos

unread,
Jun 20, 2012, 10:06:56 AM6/20/12
to kohan...@googlegroups.com

Ah, se vai ficar convertendo data .. timestamp é muito indicado ..

O resto é facinho, nao exemplificarei pq to no celular e faltam alguns caracteres :)

felipe bastos

unread,
Jun 20, 2012, 10:11:36 AM6/20/12
to kohan...@googlegroups.com

Oxe louco .. vc vai alterar o orm so pq precisa converter uma data?

DB::expr .. passe que a data que vai pro banco deve seguir determinado formato.

Isso é regra de negocio, vc nao deve detonar o fw por causa de uma simples data .. escreve no seu model uma funcao para tratar isso ..

Seu model, sacou?

Class Model_Seumodel {

function tratar_data(){}

Douglas J.A.M

unread,
Jun 20, 2012, 10:17:57 AM6/20/12
to kohan...@googlegroups.com
O _get e _set sobrescrevi e funcionou aqui na boa, o que quero ajuda é como fazer _load_values funcionar do mesmo jeito sem ter que fazer uma POG onde eu copiaria todo o código da implementação na minha função sobreescrita colocando uns ifs para tratar..

Felipe, 

A intenção é eu nunca mais ter que ficar tendo que me preocupar com a conversão de datas mechendo direto no ORM.
Timestamp não me serve porque também uso para armazenamento de data de nascimento e muitos tem + de 42 anos no banco aqui.

Daniel Ribeiro Gomes

unread,
Jun 20, 2012, 10:18:32 AM6/20/12
to kohan...@googlegroups.com
Felipe,

apesar de concordar com você no quesito DB::expr, gostaria de ressaltar que sobreescrita de classes, de maneira alguma, detona o framework se bem feita com base em padrões de design.

Aliás, é uma ótima prática.

Abs.


Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931



felipe bastos

unread,
Jun 20, 2012, 10:27:52 AM6/20/12
to kohan...@googlegroups.com

Se o banco estiver como datetime .. o ko ja considera como data (string).

O problema é só o formato .. mas ja que acha vantagem alterar o orm pra ele converter a data .. boa sorte!!

Daniel Ribeiro Gomes

unread,
Jun 20, 2012, 10:29:54 AM6/20/12
to kohan...@googlegroups.com
Eu não disse que acho vantagem ;)

Sarcasmo nessa hora não ajuda em nada.

O que eu disse é que a reescrita é uma boa prática. Depende da situação.

Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931



felipe bastos

unread,
Jun 20, 2012, 10:40:02 AM6/20/12
to kohan...@googlegroups.com

A resposta foi para o Douglas :)

Nao tem pq ele mexer em orm .. mas se ele acha vantagem .. tudo bem

E outra, nao é em __get e __set de orm que ele deve mexer ..

Se vai sobrescrever alguma funcao .. mexe em DB.

DB::convert2Ymd()

Relaxa .. se eu ficar de sarcarmo irei avisar antes

Kaléu Puskas Diedrich Caminha

unread,
Jun 20, 2012, 10:46:16 AM6/20/12
to kohan...@googlegroups.com
Douglas,
não da pra resolver somente no __get já que todas as vezes que acessamos o valor d eum atributo via ORM do Kohana o __get é chamado?

entendi o problema com o load_values..
mas não entendi porque só resolvendo no __get não sana o problema.

Poderia me explicar?
--
Kaléu Caminha | Sistemas de Informação - UFSC
Educador e Desenvolvedor para Internet
http://kaleucaminha.com

Kaléu Puskas Diedrich Caminha

unread,
Jun 20, 2012, 10:07:03 AM6/20/12
to kohan...@googlegroups.com
Também não entendi o problema.
find_all faz o set dos valores para os objetos.

Quando você trabalha com os objetos, 
vai usar o get normalmente e pelo que pude observar deveria funcionar.

Aï o que eu não entendi do que fizestes foi essa parte da condição:
$retorno instanceof ORM

O retorno não seria aqui um valor de uma coluna do banco, que foi recuperado a partir da linha:
$retorno = parent::__get($column);


Douglas J.A.M

unread,
Jun 21, 2012, 6:50:55 AM6/21/12
to kohan...@googlegroups.com
Pois é, funciona mesmo, não sei que me deu ontem :S, foi falha minha, agora nao me preocupo mais com conversões de data...

segue meu código para quem quiser dar um look.

Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.

Douglas J.A.M

unread,
Jun 21, 2012, 7:07:58 AM6/21/12
to kohan...@googlegroups.com
Obs: trocar uma condição inicial no IF's mais internos para conseguir tratar registros com relacionamento:

"isset($tablecolumns[$column]) &&" 


Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/7pw4Ks3HNJwJ.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.

Daniel Ribeiro Gomes

unread,
Jun 21, 2012, 7:39:20 AM6/21/12
to kohan...@googlegroups.com
Douglas,

aconselho você a utilizar as classes DateTime e DateInterval do próprio PHP.

São mais seguras e estáveis que as funcões nativas e tem api's de métodos bem legais.


Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931



felipe bastos

unread,
Jun 21, 2012, 8:38:49 AM6/21/12
to kohan...@googlegroups.com

Obs: desculpem, meu teclado do android nao tem todos os sinais.

........................................................

Ola teimosos .. rsrsrs to brincando .. agora vcs chegaram no ponto que queria .. para podermos discutir :)

Set e get nesse caso vao fazer buscas dinamicas no banco ..

$categoria ::: $produto-categoria;
$produto-categoria ::: $categoria;

Isso faz um select join de produtos e categorias e retorna categoria. E o outro prepara para um insert ou update.

Antes de sair alterando o orm vcs precisam entender como ele funciona.

Por que pararam no objeto ORM, na primeira possibilidade?

Primeira coisa, datas em orm são tratatadas como string. Vc quer que a data seja tratada como uma data? Nao é uma boa ideia mas vamos lá....

Possibilidade mais adequada:

* alterar DB criando um helper que use DB::exp para gerar um comando semelhante ao "Date_Format('dd/mm/yyyy', $data_salvar)".

DB::date_format ::: function($forma, $date_value) {
   return DB::exp("Date_Format($format, $date_value)");
}

Daí quando acionar ...

$produto-datacriacao ::: DB::date_format("dd/mm/yyyy", $data_salvar);

Ele geraria a string que faz salvar no formato correto ..

Update xxxxx set datacriacao ::: Date_Format(......) where id ...

Outra possibilidade é localizar nos drivers em que trecho ele gera o insert e o update, e o tipo de dado no banco.

& observe que cada banco tem sua propria funcao date_format.

* validar a data, verificar se é compativel com o tipo no banco (datetime), fazer o insert ou update para todos os drivers de banco do kohana.

É fácil notar que o DB:: é o mais facil de resolver .. e o mais aconselhavel.

Na hora de recuperar, a data vem como string, entao nao tem stress.

Espero ter ajudado.

felipe bastos

unread,
Jun 21, 2012, 8:43:39 AM6/21/12
to kohan...@googlegroups.com

Hum, resolveram .. vou olhar o codigo :)

Tava desincronizado

Daniel Ribeiro Gomes

unread,
Jun 21, 2012, 8:46:52 AM6/21/12
to kohan...@googlegroups.com
UHuhauhahuau
essa foi boa Felipe


Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931



felipe bastos

unread,
Jun 21, 2012, 8:54:37 AM6/21/12
to kohan...@googlegroups.com

Serio pow to no celular, nao tinha recebido pq a wifi tava desligada ..

Mas mantenho o que disse .

Vcs vao esbarrar nos problemas q citei :) .. essa solucao so vai servir para este sistema .. mas da pra aproveitar algumas coisas.

Pra abusar ..

Data english m/d/Y .. ja Y-m-d é um formato do mysql .. que pode nao servir pra postgree e outros bancos.

Vc caiu no problema do formato da data.

Reply all
Reply to author
Forward
0 new messages