CakePHP 1.2 – Salvando registros

Olá pessoal,

atendendo a pedidos e aproveitando que por se tratar de um assunto interessante, vou falar sobre a inserção e atualização de dados no CakePHP 1.2.

A primeira mudança que encontramos é a inclusão do método set para o model, assim antes de salvarmos, validarmos e etc, devemos definir os dados usando o mesmo.

Como todos sabem o Cake usa um único método para criar e atualizar registros (o método save). Mas como diferenciar um do outro? Com o ID 🙂 Se nos dados passados (setados) houver o id, será efetuado um update, senão um insert. Simples, não?

Exemplo:

  1. $dados = array("Usuario"=>
  2. array(
  3. "id"=>1,
  4. "nome"=>"Tulio Faria"
  5. )
  6. );
  7.  
  8. $this->Usuario->set($dados);
  9. $this->Usuario->save();

Como em $dados tem o id (chave primária), neste caso, seria feito um update setando o nome para “Tulio Faria” do Usuario de id = 1.

Para fazermos o insert, bastaria tirar o id de dados.

Para atualizar um único campo, podemos usar um outro método, o saveField.

  1. $this->Usuario->id = 1;
  2. $this->Usuario->saveField("nome", "Tulio Faria");

Neste caso, faria o mesmo efeito do exemplo do save, atualizando o nome para “Tulio Faria” para o Usuario de id = 1.

Bom é isso pessoal, qualquer dúvida comentem!

Abraços,

14 Comment

  1. Tulio, cara não tem palavras para agradecer, Brother. Bom so posso dizer que se precisar de algo cara; é só dizer. Valeu d++++ mesmo

  2. So uma duvida, este “&gt” eu ainda não tinha visto, não entendi muito bem o que é ? Mas Valeu ja consegui fazer o que eu precisava aqui; qualquer coisa chamo o Super Tulio novamente. Valeu mesmo.

  3. Opa, denada… 🙂 é sempre bom receber idéias para novos posts.

    esse &gt é pau mesmo, vou arrumar…

    falowpa

  4. Boa Tulio, sempre com suas dicas pra ajudar a galera!

  5. Hum… Estou fazendo um scaffolding de uma tabela onde os IDs são setados por uma sequence (generator do Firebird) através de uma trigger no banco e está dando erro de conversão no campo ID! O correto seria o SQL não passar o campo ID na lista de campos do select neste caso. Será que existe um modo de contornar isso (com ou sem o scaffold)?

    Nr Query Error Affected Num. rows Took (ms)
    1 INSERT INTO “CARGOS” (“ID”,”NOME”,”FLG_EXP”,”MODIFIED”,”CREATED”) VALUES (”,’yyyyy’,’I’,’11.01.2008 02:08:01′,’11.01.2008 02:08:01′) conversion error from string “” 4

  6. OK… Ninguem teve nenhum comentário a fazer?
    Tudo bem, mas só para constar, este problema com os campos ID é um bug do Cake, ticket #3854, e parece que já foi resolvido.
    Abraços.

  7. Tiago,

    infelizmente eu também não sabia te responder…

    Mas bom saber que já foi solucionado.

    Abraços,

  8. E ai Túlio, legal esses tutoriais, to aprendendo pra caramba.
    To com um duvida, se puder me ajudar.
    Na hora que vou salvar os dados estou precisando calcular com dois dados que são digitados na hora do cadastro, não to conseguindo fazer, será que pode me da uma força?
    É assim, digito o valor bruto, e a porcentagem, com esses dois dados vou calcular o valor liquido. To me atrapalhando todo ja procurei mas nao achei nada (ou não soube procurar rsrs).
    Fico grato caso possa me ajudar.

    Vlws 🙂

  9. Olá Leandro,

    você pode fazer a conta no beforeSave no model, por exemplo:

    1. function beforeSave(){
    2.     if(isset($this->data["Produto"]["bruto"])&&isset($this->data["Produto"]["porc"])){
    3.        $this->data["Produto"]["liquido"] = $this->data["Produto"]["bruto"]*$this->data["Produto"]["porc"]/100;
    4.     }
    5. }

    Espero ter ajudado!

  10. Valeu Tulio, ajudou pra caramba, deu certinho o calculo.

    🙂

  11. Olá Tutilo,

    Gostaria que vc de me informasse qual é o papel deste carinha no cake 1.2, pelo que vejo ele não tem mais papel, estou certo?

    $this->cleanUpFields ();

    PS.:
    Só tenho a agradescer a vc pelo seu trabalho e dedicação.
    Estou aprendendo muito, se eu algum dia for bem sucedido com meu trabalho lembrarei que jamais conseguiria chegar lá se não fosse sua ajuda.
    Muito obrigado!
    desejo força e sucesso imão!
    Abraços

  12. Olá Tulio, cara gostei muito do materia postado em seu blog, Uma sugestão, vc poderia desenvolver um curso de cakephp 1.2 um pouco mais avançado que os video do 1.1 e disponibilizar para venda. Tenho certeza que teria um exelente retorno. vlw obrigado pelo material disponibilizado.

  13. Olá Tulio,

    Meus metodos index e save não funcionam, inclusive com o bake. Para dar certo, eu tenho que retiralos do controller e usar o scaffold.
    O que pode esta ocorrendo.

    Uso o windows vista.
    Server: wamp

  14. tinha que deixar um comentario..
    Valeu!! ajudou pacas!

    Agora tenho um grande problema, em outra esfera..
    como faço pra rodar duas aplicacoes cakephp em um mesmo servidor?

Deixe uma resposta