RB
Campos multi values não grava corretamente
Criei um formulário através do assistente ( multivalues) porem ao salvar , grava apenas a ultima linha.
segue código abaixo. não consegui identificar o erro
segue código abaixo. não consegui identificar o erro
- <?php
- /**
- * PessoaContato Master/Detail
- * @author <your name here>
- */
- class PessoaContato extends TPage
- {
- protected $form; // form
- protected $table_details;
- protected $detail_row;
- /**
- * Class constructor
- * Creates the page and the registration form
- */
- function __construct($param)
- {
- parent::__construct($param);
- // creates the form
- $this->form = new TForm('form_Pessoa');
- $this->form->class = 'tform'; // CSS class
- $table_master = new TTable;
- $table_master->width = '100%';
- $table_master->addRowSet( new TLabel('Pessoa'), '', '')->class = 'tformtitle';
- // add a table inside form
- $table_general = new TTable;
- $table_general->width = '100%';
- $frame_general = new TFrame;
- $frame_general->class = 'tframe tframe-custom';
- $frame_general->setLegend('Pessoa');
- $frame_general->style = 'background:whiteSmoke';
- $frame_general->add($table_general);
- $frame_details = new TFrame;
- $frame_details->class = 'tframe tframe-custom';
- $frame_details->setLegend('Contato');
- $table_master->addRow()->addCell( $frame_general )->colspan=2;
- $row = $table_master->addRow();
- $row->addCell( $frame_details );
- $this->form->add($table_master);
- // master fields
- $id = new TEntry('id');
- $nome = new TEntry('nome');
- // sizes
- $id->setSize('100');
- $nome->setSize('200');
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- }
- // add form fields to be handled by form
- $this->form->addField($id);
- $this->form->addField($nome);
- // add form fields to the screen
- $table_general->addRowSet( new TLabel('Id'), $id );
- $table_general->addRowSet( new TLabel('Nome'), $nome );
- // detail
- $this->table_details = new TTable;
- $this->table_details-> width = '100%';
- $frame_details->add($this->table_details);
- $this->table_details->addSection('thead');
- $row = $this->table_details->addRow();
- // detail header
- $row->addCell( new TLabel('Ddi') );
- $row->addCell( new TLabel('Ddd') );
- $row->addCell( new TLabel('Telefone') );
- $row->addCell( new TLabel('Operadora Id') );
- $row->addCell( new TLabel('Tipo Telefone Id') );
- // create an action button (save)
- $save_button=new TButton('save');
- $save_button->setAction(new TAction(array($this, 'onSave')), _t('Save'));
- $save_button->setImage('ico_save.png');
- // create an new button (edit with no parameters)
- $new_button=new TButton('new');
- $new_button->setAction(new TAction(array($this, 'onClear')), _t('New'));
- $new_button->setImage('ico_new.png');
- // define form fields
- $this->form->addField($save_button);
- $this->form->addField($new_button);
- $table_master->addRowSet( array($save_button, $new_button), '', '')->class = 'tformaction'; // CSS class
- $this->detail_row = 0;
- // create the page container
- $container = new TVBox;
- $container->style = 'width: 100%';
- //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- parent::add($container);
- }
- /**
- * Executed whenever the user clicks at the edit button da datagrid
- */
- function onEdit($param)
- {
- try
- {
- TTransaction::open('centinel');
- if (isset($param['key']))
- {
- $key = $param['key'];
- $object = new Pessoa($key);
- $this->form->setData($object);
- $items = Contato::where('pessoa_id', '=', $key)->load();
- $this->table_details->addSection('tbody');
- if ($items)
- {
- foreach($items as $item )
- {
- $this->addDetailRow($item);
- }
- // create add button
- $add = new TButton('clone');
- $add->setLabel('Add');
- $add->setImage('fa:plus-circle green');
- $add->addFunction('ttable_clone_previous_row(this)');
- // add buttons in table
- $this->table_details->addRowSet([$add]);
- }
- else
- {
- $this->onClear($param);
- }
- TTransaction::close(); // close transaction
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- /**
- * Add detail row
- */
- public function addDetailRow($item)
- {
- $uniqid = mt_rand(1000000, 9999999);
- // create fields
- $ddi = new TEntry('ddi[]');
- $ddd = new TEntry('ddd[]');
- $telefone = new TEntry('telefone[]');
- $operadora_id = new TEntry('operadora_id[]');
- $tipo_telefone_id = new TEntry('tipo_telefone_id[]');
- // set id's
- $ddi->setId('ddi_'.$uniqid);
- $ddd->setId('ddd_'.$uniqid);
- $telefone->setId('telefone_'.$uniqid);
- $operadora_id->setId('operadora_id_'.$uniqid);
- $tipo_telefone_id->setId('tipo_telefone_id_'.$uniqid);
- // set sizes
- $ddi->setSize('100');
- $ddd->setSize('100');
- $telefone->setSize('200');
- $operadora_id->setSize('100');
- $tipo_telefone_id->setSize('100');
- // set row counter
- $ddi->{'data-row'} = $this->detail_row;
- $ddd->{'data-row'} = $this->detail_row;
- $telefone->{'data-row'} = $this->detail_row;
- $operadora_id->{'data-row'} = $this->detail_row;
- $tipo_telefone_id->{'data-row'} = $this->detail_row;
- // set value
- if (!empty($item->ddi)) { $ddi->setValue( $item->ddi ); }
- if (!empty($item->ddd)) { $ddd->setValue( $item->ddd ); }
- if (!empty($item->telefone)) { $telefone->setValue( $item->telefone ); }
- if (!empty($item->operadora_id)) { $operadora_id->setValue( $item->operadora_id ); }
- if (!empty($item->tipo_telefone_id)) { $tipo_telefone_id->setValue( $item->tipo_telefone_id ); }
- // create delete button
- $del = new TImage('fa:trash-o red');
- $del->onclick = 'ttable_remove_row(this)';
- $row = $this->table_details->addRow();
- // add cells
- $row->addCell($ddi);
- $row->addCell($ddd);
- $row->addCell($telefone);
- $row->addCell($operadora_id);
- $row->addCell($tipo_telefone_id);
- $row->addCell( $del );
- $row->{'data-row'} = $this->detail_row;
- // add form field
- $this->form->addField($ddi);
- $this->form->addField($ddd);
- $this->form->addField($telefone);
- $this->form->addField($operadora_id);
- $this->form->addField($tipo_telefone_id);
- $this->detail_row ++;
- }
- /**
- * Clear form
- */
- public function onClear($param)
- {
- $this->table_details->addSection('tbody');
- $this->addDetailRow( new stdClass );
- // create add button
- $add = new TButton('clone');
- $add->setLabel('Add');
- $add->setImage('fa:plus-circle green');
- $add->addFunction('ttable_clone_previous_row(this)');
- // add buttons in table
- $this->table_details->addRowSet([$add]);
- }
- /**
- * Save the Pessoa and the Contato's
- */
- public static function onSave($param)
- {
- try
- {
- TTransaction::open('centinel');
- $id = (int) $param['id'];
- $master = new Pessoa;
- $master->fromArray( $param);
- $master->store(); // save master object
- // delete details
- Contato::where('pessoa_id', '=', $master->id)->delete();
- if( !empty($param['ddi']) AND is_array($param['ddi']) )
- {
- foreach( $param['ddi'] as $row => $ddi)
- {
- if (!empty($ddi))
- {
- $detail = new Contato;
- $detail->pessoa_id = $master->id;
- $detail->ddi = $param['ddi'][$row];
- $detail->ddd = $param['ddd'][$row];
- $detail->telefone = $param['telefone'][$row];
- $detail->operadora_id = $param['operadora_id'][$row];
- $detail->tipo_telefone_id = $param['tipo_telefone_id'][$row];
- $detail->store();
- }
- }
- }
- $data = new stdClass;
- $data->id = $master->id;
- TForm::sendData('form_Pessoa', $data);
- TTransaction::close(); // close the transaction
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- }
Parece estar retornando o array com as informações corretamente. Habilite os logs de sql e verifique o que está sendo executado: