Gravação master detail Tenho um formulario Master detail para cadastrar cliente, tenho duas tabelas diferentes no banco para o master e para o detail(Que exibe uma datagrid caso o usuario queira cadastrar mais de um endereço), mas só consigo salvar os dados na tabela referente a parte do formulario que é Master. como posso salvar nas duas tabelas? abaixo minha função OnSave ...
G
Gravação master detail  
Tenho um formulario Master detail para cadastrar cliente, tenho duas tabelas diferentes no banco para o master e para o detail(Que exibe uma datagrid caso o usuario queira cadastrar mais de um endereço), mas só consigo salvar os dados na tabela referente a parte do formulario que é Master. como posso salvar nas duas tabelas?


abaixo minha função OnSave

 
  1. <?php
  2. public function onSave($param)
  3. {
  4. try
  5. {
  6. // open a transaction with database
  7. TTransaction::open('sgidb');
  8. $this->form->validate();
  9. $data = $this->form->getData();
  10. $master = new Cliente;
  11. $master->fromArray( (array) $data);
  12. $master->store();
  13. ClienteEnd::where('cliente_id', '=', $master->cliente_id)->delete();
  14. if( $param['ClienteEnd_list_seq_end'] )
  15. {
  16. foreach( $param['ClienteEnd_list_seq_end'] as $key => $item_id )
  17. {
  18. $detail = new ClienteEnd;
  19. $detail->seq_end = $param['ClienteEnd_list_seq_end'][$key];
  20. $detail->grp_id = $param['ClienteEnd_list_grp_id'][$key];
  21. $detail->descr = $param['ClienteEnd_list_descr'][$key];
  22. $detail->cpf = $param['ClienteEnd_list_cpf'][$key];
  23. $detail->rg = $param['ClienteEnd_list_rg'][$key];
  24. $detail->rg_orgao_emissor = $param['ClienteEnd_list_rg_orgao_emissor'][$key];
  25. $detail->cnpj = $param['ClienteEnd_list_cnpj'][$key];
  26. $detail->ie = $param['ClienteEnd_list_ie'][$key];
  27. $detail->ind_ie = $param['ClienteEnd_list_ind_ie'][$key];
  28. $detail->im = $param['ClienteEnd_list_im'][$key];
  29. $detail->flg_ret_issqn = $param['ClienteEnd_list_flg_ret_issqn'][$key];
  30. $detail->ie_suframa = $param['ClienteEnd_list_ie_suframa'][$key];
  31. $detail->nome_contato = $param['ClienteEnd_list_nome_contato'][$key];
  32. $detail->departamento = $param['ClienteEnd_list_departamento'][$key];
  33. $detail->email = $param['ClienteEnd_list_email'][$key];
  34. $detail->logradouro = $param['ClienteEnd_list_logradouro'][$key];
  35. $detail->numero = $param['ClienteEnd_list_numero'][$key];
  36. $detail->comp = $param['ClienteEnd_list_comp'][$key];
  37. $detail->bairro = $param['ClienteEnd_list_bairro'][$key];
  38. $detail->cep = $param['ClienteEnd_list_cep'][$key];
  39. $detail->cidade = $param['ClienteEnd_list_cidade'][$key];
  40. $detail->estado = $param['ClienteEnd_list_estado'][$key];
  41. $detail->pais_id = $param['ClienteEnd_list_pais_id'][$key];
  42. $detail->telefone1 = $param['ClienteEnd_list_telefone1'][$key];
  43. $detail->telefone2 = $param['ClienteEnd_list_telefone2'][$key];
  44. $detail->telefone3 = $param['ClienteEnd_list_telefone3'][$key];
  45. $detail->obs = $param['ClienteEnd_list_obs'][$key];
  46. $detail->st_endereco = $param['ClienteEnd_list_st_endereco'][$key];
  47. $detail->dt_hr_atualizacao = $param['ClienteEnd_list_dt_hr_atualizacao'][$key];
  48. $detail->usr_atualizacao = $param['ClienteEnd_list_usr_atualizacao'][$key];
  49. $detail->cliente_id = $master->cliente_id;
  50. $detail->store();
  51. }
  52. }
  53. TTransaction::close(); // close the transaction
  54. TForm::sendData('form_Cliente', (object) ['id' => $master->cliente_id]);
  55. TForm::sendData('form_Cliente', (object) ['id' => $detail->detail_cliente_id]);
  56. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  57. }
  58. catch (Exception $e) // in case of exception
  59. {
  60. new TMessage('error', $e->getMessage());
  61. $this->form->setData( $this->form->getData() ); // keep form data
  62. TTransaction::rollback();
  63. }
  64. }
  65. ?>

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 (2)


NR

O código está entrando no if abaixo?
 
  1. <?php
  2. if( $param['ClienteEnd_list_seq_end'] )
  3. ?>

Habilite a visualização do sql, deve ajudar:
 
  1. <?php
  2. TTransaction::open('sgidb');
  3. TTransaction::setLogger(new TLoggerSTD);
  4. ?>
G

Ola Nataniel,
Consegui resolver o problema, tive que atribuir o campo de Id da tabela de cliente, mas fiz com o tipo THidden dai então consegui salvar nos dois bancos referenciando.

Obrigado!!