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 ...
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

 
  1. <?php
  2. /**
  3. * PessoaContato Master/Detail
  4. * @author <your name here>
  5. */
  6. class PessoaContato extends TPage
  7. {
  8. protected $form; // form
  9. protected $table_details;
  10. protected $detail_row;
  11. /**
  12. * Class constructor
  13. * Creates the page and the registration form
  14. */
  15. function __construct($param)
  16. {
  17. parent::__construct($param);
  18. // creates the form
  19. $this->form = new TForm('form_Pessoa');
  20. $this->form->class = 'tform'; // CSS class
  21. $table_master = new TTable;
  22. $table_master->width = '100%';
  23. $table_master->addRowSet( new TLabel('Pessoa'), '', '')->class = 'tformtitle';
  24. // add a table inside form
  25. $table_general = new TTable;
  26. $table_general->width = '100%';
  27. $frame_general = new TFrame;
  28. $frame_general->class = 'tframe tframe-custom';
  29. $frame_general->setLegend('Pessoa');
  30. $frame_general->style = 'background:whiteSmoke';
  31. $frame_general->add($table_general);
  32. $frame_details = new TFrame;
  33. $frame_details->class = 'tframe tframe-custom';
  34. $frame_details->setLegend('Contato');
  35. $table_master->addRow()->addCell( $frame_general )->colspan=2;
  36. $row = $table_master->addRow();
  37. $row->addCell( $frame_details );
  38. $this->form->add($table_master);
  39. // master fields
  40. $id = new TEntry('id');
  41. $nome = new TEntry('nome');
  42. // sizes
  43. $id->setSize('100');
  44. $nome->setSize('200');
  45. if (!empty($id))
  46. {
  47. $id->setEditable(FALSE);
  48. }
  49. // add form fields to be handled by form
  50. $this->form->addField($id);
  51. $this->form->addField($nome);
  52. // add form fields to the screen
  53. $table_general->addRowSet( new TLabel('Id'), $id );
  54. $table_general->addRowSet( new TLabel('Nome'), $nome );
  55. // detail
  56. $this->table_details = new TTable;
  57. $this->table_details-> width = '100%';
  58. $frame_details->add($this->table_details);
  59. $this->table_details->addSection('thead');
  60. $row = $this->table_details->addRow();
  61. // detail header
  62. $row->addCell( new TLabel('Ddi') );
  63. $row->addCell( new TLabel('Ddd') );
  64. $row->addCell( new TLabel('Telefone') );
  65. $row->addCell( new TLabel('Operadora Id') );
  66. $row->addCell( new TLabel('Tipo Telefone Id') );
  67. // create an action button (save)
  68. $save_button=new TButton('save');
  69. $save_button->setAction(new TAction(array($this, 'onSave')), _t('Save'));
  70. $save_button->setImage('ico_save.png');
  71. // create an new button (edit with no parameters)
  72. $new_button=new TButton('new');
  73. $new_button->setAction(new TAction(array($this, 'onClear')), _t('New'));
  74. $new_button->setImage('ico_new.png');
  75. // define form fields
  76. $this->form->addField($save_button);
  77. $this->form->addField($new_button);
  78. $table_master->addRowSet( array($save_button, $new_button), '', '')->class = 'tformaction'; // CSS class
  79. $this->detail_row = 0;
  80. // create the page container
  81. $container = new TVBox;
  82. $container->style = 'width: 100%';
  83. //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  84. $container->add($this->form);
  85. parent::add($container);
  86. }
  87. /**
  88. * Executed whenever the user clicks at the edit button da datagrid
  89. */
  90. function onEdit($param)
  91. {
  92. try
  93. {
  94. TTransaction::open('centinel');
  95. if (isset($param['key']))
  96. {
  97. $key = $param['key'];
  98. $object = new Pessoa($key);
  99. $this->form->setData($object);
  100. $items = Contato::where('pessoa_id', '=', $key)->load();
  101. $this->table_details->addSection('tbody');
  102. if ($items)
  103. {
  104. foreach($items as $item )
  105. {
  106. $this->addDetailRow($item);
  107. }
  108. // create add button
  109. $add = new TButton('clone');
  110. $add->setLabel('Add');
  111. $add->setImage('fa:plus-circle green');
  112. $add->addFunction('ttable_clone_previous_row(this)');
  113. // add buttons in table
  114. $this->table_details->addRowSet([$add]);
  115. }
  116. else
  117. {
  118. $this->onClear($param);
  119. }
  120. TTransaction::close(); // close transaction
  121. }
  122. }
  123. catch (Exception $e) // in case of exception
  124. {
  125. new TMessage('error', $e->getMessage());
  126. TTransaction::rollback();
  127. }
  128. }
  129. /**
  130. * Add detail row
  131. */
  132. public function addDetailRow($item)
  133. {
  134. $uniqid = mt_rand(1000000, 9999999);
  135. // create fields
  136. $ddi = new TEntry('ddi[]');
  137. $ddd = new TEntry('ddd[]');
  138. $telefone = new TEntry('telefone[]');
  139. $operadora_id = new TEntry('operadora_id[]');
  140. $tipo_telefone_id = new TEntry('tipo_telefone_id[]');
  141. // set id's
  142. $ddi->setId('ddi_'.$uniqid);
  143. $ddd->setId('ddd_'.$uniqid);
  144. $telefone->setId('telefone_'.$uniqid);
  145. $operadora_id->setId('operadora_id_'.$uniqid);
  146. $tipo_telefone_id->setId('tipo_telefone_id_'.$uniqid);
  147. // set sizes
  148. $ddi->setSize('100');
  149. $ddd->setSize('100');
  150. $telefone->setSize('200');
  151. $operadora_id->setSize('100');
  152. $tipo_telefone_id->setSize('100');
  153. // set row counter
  154. $ddi->{'data-row'} = $this->detail_row;
  155. $ddd->{'data-row'} = $this->detail_row;
  156. $telefone->{'data-row'} = $this->detail_row;
  157. $operadora_id->{'data-row'} = $this->detail_row;
  158. $tipo_telefone_id->{'data-row'} = $this->detail_row;
  159. // set value
  160. if (!empty($item->ddi)) { $ddi->setValue( $item->ddi ); }
  161. if (!empty($item->ddd)) { $ddd->setValue( $item->ddd ); }
  162. if (!empty($item->telefone)) { $telefone->setValue( $item->telefone ); }
  163. if (!empty($item->operadora_id)) { $operadora_id->setValue( $item->operadora_id ); }
  164. if (!empty($item->tipo_telefone_id)) { $tipo_telefone_id->setValue( $item->tipo_telefone_id ); }
  165. // create delete button
  166. $del = new TImage('fa:trash-o red');
  167. $del->onclick = 'ttable_remove_row(this)';
  168. $row = $this->table_details->addRow();
  169. // add cells
  170. $row->addCell($ddi);
  171. $row->addCell($ddd);
  172. $row->addCell($telefone);
  173. $row->addCell($operadora_id);
  174. $row->addCell($tipo_telefone_id);
  175. $row->addCell( $del );
  176. $row->{'data-row'} = $this->detail_row;
  177. // add form field
  178. $this->form->addField($ddi);
  179. $this->form->addField($ddd);
  180. $this->form->addField($telefone);
  181. $this->form->addField($operadora_id);
  182. $this->form->addField($tipo_telefone_id);
  183. $this->detail_row ++;
  184. }
  185. /**
  186. * Clear form
  187. */
  188. public function onClear($param)
  189. {
  190. $this->table_details->addSection('tbody');
  191. $this->addDetailRow( new stdClass );
  192. // create add button
  193. $add = new TButton('clone');
  194. $add->setLabel('Add');
  195. $add->setImage('fa:plus-circle green');
  196. $add->addFunction('ttable_clone_previous_row(this)');
  197. // add buttons in table
  198. $this->table_details->addRowSet([$add]);
  199. }
  200. /**
  201. * Save the Pessoa and the Contato's
  202. */
  203. public static function onSave($param)
  204. {
  205. try
  206. {
  207. TTransaction::open('centinel');
  208. $id = (int) $param['id'];
  209. $master = new Pessoa;
  210. $master->fromArray( $param);
  211. $master->store(); // save master object
  212. // delete details
  213. Contato::where('pessoa_id', '=', $master->id)->delete();
  214. if( !empty($param['ddi']) AND is_array($param['ddi']) )
  215. {
  216. foreach( $param['ddi'] as $row => $ddi)
  217. {
  218. if (!empty($ddi))
  219. {
  220. $detail = new Contato;
  221. $detail->pessoa_id = $master->id;
  222. $detail->ddi = $param['ddi'][$row];
  223. $detail->ddd = $param['ddd'][$row];
  224. $detail->telefone = $param['telefone'][$row];
  225. $detail->operadora_id = $param['operadora_id'][$row];
  226. $detail->tipo_telefone_id = $param['tipo_telefone_id'][$row];
  227. $detail->store();
  228. }
  229. }
  230. }
  231. $data = new stdClass;
  232. $data->id = $master->id;
  233. TForm::sendData('form_Pessoa', $data);
  234. TTransaction::close(); // close the transaction
  235. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  236. }
  237. catch (Exception $e) // in case of exception
  238. {
  239. new TMessage('error', $e->getMessage());
  240. TTransaction::rollback();
  241. }
  242. }
  243. }

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


NR

Parece estar retornando o array com as informações corretamente. Habilite os logs de sql e verifique o que está sendo executado:
 
  1. <?php
  2. TTransaction::setLogger(new TLoggerSTD());
  3. ?>