Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
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.

 
  1. <?php
  2. class AvaliacaoPrescricao extends TStandardForm
  3. {
  4. protected $form;
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. Adianti\Control\TPage::include_css('app/resources/formdecorator.css');
  9. $html = new \Adianti\Widget\Template\THtmlRenderer('app/resources/formdecorator.html');
  10. $this->form = new TQuickForm('form_AvaliaçãoPrescrição');
  11. ;
  12. // Bancos de dados e Active Record
  13. parent::setDatabase('permission');
  14. parent::setActiveRecord('Prescricao');
  15. //Campos do Formulario //origem //banco //model //gravaBanco // aparece na caixa
  16. $codPaciente = new TDBCombo('codPaciente', 'permission', 'Paciente', 'nome', 'nome');
  17. $codAvaliador = new TDBCombo('codAvaliador','permission','Avaliador','nomeAvaliador','nomeAvaliador');
  18. $dataPresc= new TDate('dataPresc');
  19. $dataPresc->setMask('dd/mm/yyyy');
  20. $dataPresc->setDatabaseMask('yyyy-mm-dd');
  21. //Objetivos: Clinicos e Funcionais
  22. $diagnostico = new TEntry('diagnostico');
  23. $objetivo = new Adianti\Widget\Form\TCheckGroup('objetivo'); // Esse campo que quero gravar no banco
  24. $cb = array();
  25. $cb['1'] = 'Hipertensão Arterial Sistêmica';
  26. $cb['2'] = 'Angina';
  27. $cb['3'] = 'Dispnéia';
  28. $cb['4'] = 'Dislipidemia';
  29. $cb['5'] = 'Obesidade';
  30. $cb['6'] = 'Tabagismo';
  31. $cb['7'] = 'Depressão';
  32. $cb['8'] = 'Estresse';
  33. $objetivo->addItems($cb);
  34. $objetivo->setLayout('horizontal');
  35. // Campos que aparecem no Formulário
  36. $this->form->addQuickField('Paciente',$codPaciente,300);
  37. $this->form->addQuickField('Avaliador',$codAvaliador,300);
  38. $this->form->addQuickField('Diagnóstico Clínico ', $diagnostico,300);
  39. $this->form->addQuickField('Objetivos ', $objetivo,300);
  40. $this->form->addQuickField('Funcionais ', $funcional,300);
  41. $this->form->addQuickField('Cicloergometro MMSS', $ciclommss,100);
  42. $this->form->addQuickField('Cicloergometro MMII',$ciclommii,100);
  43. $this->form->addQuickField('Frequênica',$frequencia,100);
  44. $this->form->addQuickField('Modalidade',$modalidade,300);
  45. $this->form->addQuickFields('Tipo Tempo', array($tipotp, new TLabel('Tempo'), $tempo));
  46. $this->form->addQuickFields('FC Inferior', array($fcinf, new TLabel('FC Superior'), $fcsup));
  47. $this->form->addQuickFields('Cicloergômetro M. Superiores', array( $lbl_duracaos, $duracaos, $lbl_cargas,$cargas, $lbl_rpms, $rpms, $lbl_posicaos, $posicaos ));
  48. $this->form->addQuickFields('Cicloergômetro M. Inferiores', array( $lbl_duracaoi, $duracaoi, $lbl_cargai,$cargai, $lbl_rpmi, $rpmi, $lbl_posicaoi, $posicaoi ));
  49. $this->form->addQuickField('Parecer',$parecer,200);
  50. $this->form->addQuickField('Data',$dataPresc,100);
  51. $parecer->setSize(650,70);
  52. $replace = array('form'=>$this->form);
  53. $html->enableSection('main',$replace);
  54. // Ações dos botões do formulário
  55. $this->form->addQuickAction('Salvar', new TAction(array($this,'onSave')),'ico_save.png');
  56. $vbox = new TVBox;
  57. $vbox->add(new Adianti\Widget\Util\TXMLBreadCrumb('menu.xml', 'AvaliacaoPrescricao'));
  58. //$vbox->add($this->form);
  59. $vbox->add($html);
  60. parent::add($vbox);
  61. }
  62. function onSave()
  63. {
  64. try
  65. {
  66. TTransaction::open('permission');
  67. $prescricao = $this->form->getData();
  68. // 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.
  69. $prescricao->store();
  70. new TMessage('info', 'Avaliação e Prescrição cadastrada com Sucesso!');
  71. TTransaction::close(); // close the transaction
  72. }
  73. catch (Exception $e) // in case of exception
  74. {
  75. new TMessage('error', '<b>Error</b>: ' . $e->getMessage());
  76. TTransaction::rollback();
  77. }
  78. }
  79. }
  80. ?>

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:
 
  1. <?php
  2. //onSave
  3. $prescricao = $this->form->getData('Prescricao');
  4. foreach ($prescricao->objetivo as $id_objetivo)
  5. {
  6. $prescricao->addObjetivo(new Objetivo($id_objetivo);
  7. }
  8. $prescricao->store();
  9. ?>