PC
Problemas com gravação no banco de dados MYSQL
Boa Tarde!
Estou com o seguinte problema criei uma tabela e posteriormente acrescentei duas colunas, Membro e Recebe, alterei a classe, contudo, as informações não são inclusas na tabela.
Outra coisa os dois TCheckGroup não aparecem marcados utilizando o setValue('s')
Será que alguém pode me socorrer?
Clase </>
Estou com o seguinte problema criei uma tabela e posteriormente acrescentei duas colunas, Membro e Recebe, alterei a classe, contudo, as informações não são inclusas na tabela.
Outra coisa os dois TCheckGroup não aparecem marcados utilizando o setValue('s')
Será que alguém pode me socorrer?
Clase </>
- <?php
- class Membro extends TRecord
- {
- const TABLENAME = 'membro';
- const PRIMARYKEY = 'MembroId';
- const IDPOLICY = 'max';
- private $cargo;
- private $capelania;
- public function __construct($MembroId = NULL)
- {
- parent::__construct($MembroId);
- parent::addAttribute('Nome');
- parent::addAttribute('Endereco');
- parent::addAttribute('Telefone');
- parent::addAttribute('CargoId');
- parent::addAttribute('CapelaniaId');
- <b> parent::addAttribute('Membro'); </b>
- <b> parent::addAttribute('Recebe');</b.>
- }
- public function set_cargo( Cargo $object)
- {
- $this->cargo = $object;
- $this->cargoId = $object->CargoId;
- }
- public function get_cargo()
- {
- if (empty( $this->cargo) )
- {
- $this->cargo = new Cargo( $this->CargoId );
- }
- return $this->cargo;
- }
- public function get_capelania()
- {
- if (empty( $this->capelania) )
- {
- $this->capelania = new Capelania( $this->CapelaniaId );
- }
- return $this->capelania;
- }
- }
- <b> Formulário que realiza o cadastro</>
- <?php
- class MembroForm extends TPage
- {
- private $form;
- public function __construct($param)
- {
- parent::__construct();
- //$this->form = new BootstrapFormBuilder(new TQuickForm);
- $this->form = new BootstrapFormBuilder;
- //$this->form->setFormTitle('Cadastro de Membros');
- $this->form->class = 'tform';
- $this->form->style = 'width: 800px';
- $MembroId = new TEntry('MembroId');
- $Nome = new TEntry('Nome');
- $Endereco = new TEntry('Endereco');
- $Telefone = new TEntry('Telefone');
- $CargoId = new TDBCombo('CargoId', 'imepc', 'Cargo', 'CargoId', 'Descricao');
- $CapelaniaId = new TDBCombo('CapelaniaId', 'imepc', 'Capelania', 'CapelaniaId', 'Descricao');
- $Membro = new TCheckGroup('Membro');
- $Recebe = new TCheckGroup('Recebe');
- $MembroId->setEditable(FALSE);
- $Nome->placeholder = 'Nome Completo';
- $Nome->addValidation('Nome', new TRequiredValidator);
- $Nome->setSize('100%');
- $Endereco->placeholder = 'Endereço Completo';
- $Endereco->addValidation('Endereço', new TRequiredValidator);
- $Endereco->setSize('100%');
- $Telefone->placeholder = '(99) 99999-9999';
- $Telefone->setMask('(99)99999-99999');
- //$CargoId->SetValue(1);
- $CargoId->enableSearch();
- //$CapelaniaId->SetValue(1);
- $CapelaniaId->enableSearch();
- $itens = array();
- $itens['s'] = 'Sim';
- $itens['n'] = 'Não';
- $Membro->setUseButton();
- $Membro->addItems( $itens );
- $Membro->setLayout('horizontal');
- $Membro->setValue('s');
- $Recebe->setUseButton();
- $Recebe->addItems($itens);
- $Recebe->setLayout('horizontal');
- $Recebe->setValue('n');
- $Recebe->addValidation('Receba', new TRequiredValidator);
- $labelCapelania = new TLabel('Tipo de Capelania');
- $labelCapelania->setSize('100');
- $labelCargo = new TLabel('Cargo');
- $this->form->addFields( [ $labelCargo ], [ $MembroId ] ) ;
- $this->form->addFields( [new TLabel('Nome') ] , [ $Nome ] );
- $this->form->addFields( [new TLabel('Endereço') ] , [ $Endereco ] );
- $this->form->addFields( [new TLabel('Telefone') ] , [ $Telefone ] );
- $this->form->addFields( [new TLabel('Cargo') ] , [ $CargoId ] , [ $labelCapelania ] , [ $CapelaniaId ] );
- $label1 = new TLabel('Observações', '#7D78B6', 12, 'bi');
- $label1->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%';
- $this->form->addContent( [$label1] );
- $this->form->addFields( [new TLabel('Membro Ativo?') ] , [ $Membro ] , [new TLabel('Cesta Básica?') ] , [ $Recebe ] );
- $salvar = new TAction( array($this, 'onSave') );
- $novo = new TAction( array($this, 'onClear') );
- $this->form->addAction('Salvar', $salvar, 'fa:save green');
- $this->form->addAction('Novo', $novo, 'fa:plus-circle green');
- $panel = new TPanelGroup('Cadastro de Membros');
- $panel->add($this->form);
- $vbox = new TVBox;
- $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $vbox->add($panel);
- parent::add($vbox);
- }
- public function onClear($param)
- {
- $this->form->clear( true );
- }
- public function onEdit($param)
- {
- try
- {
- if (isset($param['key']) )
- {
- $key = $param['key'];
- TTransaction::open('imepc');
- TTransaction::setLogger(new TLoggerSTD);
- $membro = new Membro($key);
- $this->form->setData( $membro );
- TTransaction::close();
- }
- }
- catch(Exception $e)
- {
- new TMessage('error', $e->getMessage() );
- }
- }
- public function onSave($param)
- {
- try
- {
- TTransaction::open('imepc');
- //$data = $this->form->getData('Membro');
- //$data = $this->form->getData();
- $data = $this->form->getData();
- $membro = new Membro;
- $membro->fromArray( (array) $data );
- $membro->store();
- $this->form->validate();
- $membro->store();
- $data->MembroId = $membro->MembroId;
- $this->form->setData( $data );
- new TMessage('info', 'Registro Salvo com Sucesso!!!');
- //new TMessage('info', json_encode( $data ) );
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage() );
- TTransaction::rollback();
- }
- }
- }
Complementando!
O insert está sendo enviado sem as duas colunas criadas.
Olá este é proposital?
parent::addAttribute('Membro');
retire-os e tente novamente......nos retorne
o b de bold.....
O b coloquei porque achei que fosse destacar as linhas.
Como o checkgroup permite selecionar mais de uma opção, o getData sempre retorna um array para campos desse tipo. Você precisa tratar essa informação na funçãon onSave.
Nataniel bom dia!
Quando eu instancio um novo objeto e faço o store para fazê-lo eu utilo o fromArray e transformo o retorno do form em array.
É esse tratamento que você se refere?
att.
André bom dia!
Eu removi e inclui novamente e os novos atributos não são reconhecidos, acho que deve ser algum bug do adianti.
att.
Paulo, não é bug do Adianti. A questão é que você está passando um array para um atributo e no momento do store esse valor é desconsiderado por não ser um valor válido.
Se a ideia é permitir que o usuário selecione somente 1 opção, não deveria usar um radio no lugar do check? Com o check ele vai conseguir selecionar 'Sim' e 'Não' ao mesmo tempo. Trocando para radio já deve resolver o problema.
Senhores agradeço a ajuda!
Resolvi o problema entendi o erro que estava cometendo utilizei o TRadioGroup, problema resolvido.