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

<?phpclass 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();        }    }            }?>

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


NR

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

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

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:
<?php//onSave$prescricao = $this->form->getData('Prescricao'); foreach ($prescricao->objetivo as $id_objetivo){       $prescricao->addObjetivo(new Objetivo($id_objetivo);}$prescricao->store();?>