Dica: salvando automaticamente a data de criação e de última atualização quando a tabela não segue o padrão do CakePHP

Olá pessoal,

hoje passei por mais um problema no meu projeto por ele não usar a padronização do Cake no banco.

Como vocês devem saber o Cake popula automaticamente campos nomeados com CREATED, MODIFIED e UPDATED, sendo data de criação no primeiro e alteração nos dois últimos.

Pois bem, no meu projeto, que não segue o padrão do Cake tive que usar o callback do model, o beforeSave. O qual é executado antes do save do model e após a validação dos dados.
O código ficou assim dentro do meu model:

PHP:
  1. function beforeSave(){
  2. if (!isset($this->data["Model"]["CampoChavePrimária"])){
  3. $this->data["Model"]["CampoCriadoEm"] = date('Y-m-d H:i:s');
  4. }
  5. $this->data["Model"]["CampoModificadoEm"] = date('Y-m-d H:i:s');
  6. return true;
  7. }

Onde:

  • Model - seu model
  • CampoChavePrimaria - o campo chave primária da sua tabela que persiste o model
  • CampoCriadoEm - o campo que armazena a data de criação do registro
  • CampoModificadoEm - o campo que armazena a data de alteração do registro

Observe que o beforeSave retorna true, somente quando isso ocorre que é efetuado o save no banco.

Isso pode ser usado em outras situações, daí vai da criatividade, como criptografar a senha para guardar no banco e por aí vai...

Qualquer dúvida, comentem!

Até a próxima!

5 Comentários »

  1. Victor Sobreira said,

    Outubro 18, 2007 @ 02:56

    Achei muito bom o post.

    usei o before save quando eu tinha que transformar um campo de validação que era dia,mes e ano em uma data.

    function beforeSave(){
    $data['Promocoe']['validade']=$data['Promocoe']['ano'].'-'.$data['Promocoe']['mes'].'-'.$data['Promocoe']['dia'];

    // Apagando dados que não usa.
    unset($data['Promocoe']['dia']);
    unset($data['Promocoe']['ano']);
    unset($data['Promocoe']['mes']);

    return true
    }

    exemplo acima do que eu fiz.

  2. Henrique de Castro said,

    Fevereiro 16, 2008 @ 17:50

    Interessante a dica, com ela me veio uma idéia que gerou dúvidas.

    Utilizei o beforeSave para fazer Upload de imagens e gravá-las no banco. Funcionou blz, exceto por um detalhe, é que no meu caso a imagem é obrigatória, então como validá-la dentro do padrão do Cake?! Poderia jogar um invalidate para o field?!

    Valeu e parabéns pelo blog.

  3. Henrique de Castro said,

    Fevereiro 16, 2008 @ 18:13

    Ahhh.. o detalhe que esqueci de mencionar.. é no cake 1.2.

    No 1.1.x eu dava um invalidate e funcionava, no 1.2 não consegui fazer isso.

  4. AndreEncinas said,

    Maio 23, 2008 @ 02:59

    olá Túlio veja se estou errado .....fiz segundo o post e a data de created eh alterada sempre, mesmo que eu esteja editando e não inserindo, onde estou errando ?

    valeuuu

  5. AndreEncinas said,

    Maio 23, 2008 @ 03:16

    olá Túlio ja vi meu erro, não estava verificando a existência da PKey.....valeu

    obrigado por este MARAVILHOSO SITE ......este é meu site de cabeçeira rsrsrsrsr

    valeuuuu

RSS feed for comments on this post · URI do TrackBack

Deixe seu comentário