AJ
Dúvida cruel sobre CheckGroup e como Gravar no Banco.
Ola Pessoal. Ja li inumeros posts e pesquisei mas nao consigo fazer funcionar sempre dá um erro.
Tenho uma tela com CHECKGROUP. E preciso marcar varios tipos de exames para o cliente. Na hora de gravar o registro é salva mas nao grava no banco.
Na minha tabela TB_PRESCRICAO (id, codPaciente, exames,....) ja criei uma tabela igual os exemplos do tutor ComplexView.
Tenho uma tela com CHECKGROUP. E preciso marcar varios tipos de exames para o cliente. Na hora de gravar o registro é salva mas nao grava no banco.
Na minha tabela TB_PRESCRICAO (id, codPaciente, exames,....) ja criei uma tabela igual os exemplos do tutor ComplexView.
- <?php
- class AvaliacaoPrescricao extends TStandardForm
- {
- protected $form;
- public function __construct()
- {
- parent::__construct();
- Adianti\Control\TPage::include_css('app/resources/formdecorator.css');
- $html = new \Adianti\Widget\Template\THtmlRenderer('app/resources/formdecorator.html');
- $this->form = new TQuickForm('form_AvaliaçãoPrescrição');
- ;
- // Bancos de dados e Active Record
- parent::setDatabase('permission');
- parent::setActiveRecord('Prescricao');
- //Campos do Formulario //origem //banco //model //gravaBanco // aparece na caixa
- $codPaciente = new TDBCombo('codPaciente', 'permission', 'Paciente', 'nome', 'nome');
- $codAvaliador = new TDBCombo('codAvaliador','permission','Avaliador','nomeAvaliador','nomeAvaliador');
- $dataPresc= new TDate('dataPresc');
- $dataPresc->setMask('dd/mm/yyyy');
- $dataPresc->setDatabaseMask('yyyy-mm-dd');
- //Objetivos: Clinicos e Funcionais
- $diagnostico = new TEntry('diagnostico');
- $objetivo = new Adianti\Widget\Form\TCheckGroup('objetivo'); // Esse campo que quero gravar no banco
- $cb = array();
- $cb['1'] = 'Hipertensão Arterial Sistêmica';
- $cb['2'] = 'Angina';
- $cb['3'] = 'Dispnéia';
- $cb['4'] = 'Dislipidemia';
- $cb['5'] = 'Obesidade';
- $cb['6'] = 'Tabagismo';
- $cb['7'] = 'Depressão';
- $cb['8'] = 'Estresse';
- $objetivo->addItems($cb);
- $objetivo->setLayout('horizontal');
- // Campos que aparecem no Formulário
- $this->form->addQuickField('Paciente',$codPaciente,300);
- $this->form->addQuickField('Avaliador',$codAvaliador,300);
- $this->form->addQuickField('Diagnóstico Clínico ', $diagnostico,300);
- $this->form->addQuickField('Objetivos ', $objetivo,300);
- $this->form->addQuickField('Funcionais ', $funcional,300);
- $this->form->addQuickField('Cicloergometro MMSS', $ciclommss,100);
- $this->form->addQuickField('Cicloergometro MMII',$ciclommii,100);
- $this->form->addQuickField('Frequênica',$frequencia,100);
- $this->form->addQuickField('Modalidade',$modalidade,300);
- $this->form->addQuickFields('Tipo Tempo', array($tipotp, new TLabel('Tempo'), $tempo));
- $this->form->addQuickFields('FC Inferior', array($fcinf, new TLabel('FC Superior'), $fcsup));
- $this->form->addQuickFields('Cicloergômetro M. Superiores', array( $lbl_duracaos, $duracaos, $lbl_cargas,$cargas, $lbl_rpms, $rpms, $lbl_posicaos, $posicaos ));
- $this->form->addQuickFields('Cicloergômetro M. Inferiores', array( $lbl_duracaoi, $duracaoi, $lbl_cargai,$cargai, $lbl_rpmi, $rpmi, $lbl_posicaoi, $posicaoi ));
- $this->form->addQuickField('Parecer',$parecer,200);
- $this->form->addQuickField('Data',$dataPresc,100);
- $parecer->setSize(650,70);
- $replace = array('form'=>$this->form);
- $html->enableSection('main',$replace);
- // Ações dos botões do formulário
- $this->form->addQuickAction('Salvar', new TAction(array($this,'onSave')),'ico_save.png');
- $vbox = new TVBox;
- $vbox->add(new Adianti\Widget\Util\TXMLBreadCrumb('menu.xml', 'AvaliacaoPrescricao'));
- //$vbox->add($this->form);
- $vbox->add($html);
- parent::add($vbox);
- }
- function onSave()
- {
- try
- {
- TTransaction::open('permission');
- $prescricao = $this->form->getData();
- // AQUI PRECISO GRAVAR O CHECK COMO FACO PARA IMPLODIR O ARRAY QUE CHEGA COM OS GRUPOS E COMO DEVE TEM QUE O TIPO DE CAMPO DA TABELA VARCHAR? OU INT? SENDO QUE SERAO VARIOS VALORES.
- $prescricao->store();
- new TMessage('info', 'Avaliação e Prescrição cadastrada com Sucesso!');
- TTransaction::close(); // close the transaction
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', '<b>Error</b>: ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- }
- ?>
Se você está planejando gravar as várias opções selecionadas em 1 só campo da tabela, você precisa criar um campo array no banco de dados. Veja o link abaixo:
https://www.adianti.com.br/forum/pt/view_2037?como-tratar-string-do-tipo-array-n
Na minha opinião seria melhor modificar seu banco de dados para criar uma agregação entre Prescricao e Objetivo, sem a necessidade de utilizar campos do tipo array.
Blz estou fazendo assim. Busquei o exemplo de customer e Skill do tutor onde uma pessoa tem varias habilidades no meu caso tenho uma Prescrição com vários exames. A prescrição é gravada na tabela system-prescrição e os exames na tabela System-prescricao-objetivo aí na hora de gravar os ChechGroup é um array e quando chega no onsave() eu tenho que concatenar? Como faço para armazenar no store. Vou postar meu código estou com muita dúvida já papirei um pouco de agregação e composição no livro.
Se você criou a agregação entre os modelos basta fazer um foreach e adicionar os objetivos à prescrição, do mesmo modo que nesse exemplo do tutor que você citou: