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

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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. ?>