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
abaixo minha função OnSave
- <?php
- public function onSave($param)
- {
- try
- {
- // open a transaction with database
- TTransaction::open('sgidb');
- $this->form->validate();
- $data = $this->form->getData();
- $master = new Cliente;
- $master->fromArray( (array) $data);
- $master->store();
- ClienteEnd::where('cliente_id', '=', $master->cliente_id)->delete();
- if( $param['ClienteEnd_list_seq_end'] )
- {
- foreach( $param['ClienteEnd_list_seq_end'] as $key => $item_id )
- {
- $detail = new ClienteEnd;
- $detail->seq_end = $param['ClienteEnd_list_seq_end'][$key];
- $detail->grp_id = $param['ClienteEnd_list_grp_id'][$key];
- $detail->descr = $param['ClienteEnd_list_descr'][$key];
- $detail->cpf = $param['ClienteEnd_list_cpf'][$key];
- $detail->rg = $param['ClienteEnd_list_rg'][$key];
- $detail->rg_orgao_emissor = $param['ClienteEnd_list_rg_orgao_emissor'][$key];
- $detail->cnpj = $param['ClienteEnd_list_cnpj'][$key];
- $detail->ie = $param['ClienteEnd_list_ie'][$key];
- $detail->ind_ie = $param['ClienteEnd_list_ind_ie'][$key];
- $detail->im = $param['ClienteEnd_list_im'][$key];
- $detail->flg_ret_issqn = $param['ClienteEnd_list_flg_ret_issqn'][$key];
- $detail->ie_suframa = $param['ClienteEnd_list_ie_suframa'][$key];
- $detail->nome_contato = $param['ClienteEnd_list_nome_contato'][$key];
- $detail->departamento = $param['ClienteEnd_list_departamento'][$key];
- $detail->email = $param['ClienteEnd_list_email'][$key];
- $detail->logradouro = $param['ClienteEnd_list_logradouro'][$key];
- $detail->numero = $param['ClienteEnd_list_numero'][$key];
- $detail->comp = $param['ClienteEnd_list_comp'][$key];
- $detail->bairro = $param['ClienteEnd_list_bairro'][$key];
- $detail->cep = $param['ClienteEnd_list_cep'][$key];
- $detail->cidade = $param['ClienteEnd_list_cidade'][$key];
- $detail->estado = $param['ClienteEnd_list_estado'][$key];
- $detail->pais_id = $param['ClienteEnd_list_pais_id'][$key];
- $detail->telefone1 = $param['ClienteEnd_list_telefone1'][$key];
- $detail->telefone2 = $param['ClienteEnd_list_telefone2'][$key];
- $detail->telefone3 = $param['ClienteEnd_list_telefone3'][$key];
- $detail->obs = $param['ClienteEnd_list_obs'][$key];
- $detail->st_endereco = $param['ClienteEnd_list_st_endereco'][$key];
- $detail->dt_hr_atualizacao = $param['ClienteEnd_list_dt_hr_atualizacao'][$key];
- $detail->usr_atualizacao = $param['ClienteEnd_list_usr_atualizacao'][$key];
- $detail->cliente_id = $master->cliente_id;
- $detail->store();
- }
- }
- TTransaction::close(); // close the transaction
- TForm::sendData('form_Cliente', (object) ['id' => $master->cliente_id]);
- TForm::sendData('form_Cliente', (object) ['id' => $detail->detail_cliente_id]);
- new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- ?>
O código está entrando no if abaixo?
Habilite a visualização do sql, deve ajudar:
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!!