Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Dados de chave estrangeira não carregam UniqueSearch Estou desenvolvendo um sistema de controle de abastecimento e eu preciso usar dados de outra tabela em um UniqueSearch para fazer um cadastro. Eu já fiz esse mesmo em outros formulários, porém nesse caso eu não fiz no momento de criação do formulario e inseri depois tanto no Class tanto no Forms, porém ele não funciona (mesmo estando tudo aparentemente correto). Código do Class: ...
JM
Dados de chave estrangeira não carregam UniqueSearch  
Estou desenvolvendo um sistema de controle de abastecimento e eu preciso usar dados de outra tabela em um UniqueSearch para fazer um cadastro. Eu já fiz esse mesmo em outros formulários, porém nesse caso eu não fiz no momento de criação do formulario e inseri depois tanto no Class tanto no Forms, porém ele não funciona (mesmo estando tudo aparentemente correto).

Código do Class:
  1. <?php 
  1. <?php
  2. /**
  3.  * TbAbastecimentoCidadeClass Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class TbAbastecimentoCidadeClass extends TRecord
  7. {
  8.     const TABLENAME 'tb_abastecimento_cidade';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     
  12.     private $tb_frente_class;
  13.     
  14.     
  15.     /**
  16.      * Constructor method
  17.      */
  18.     public function __construct($id NULL$callObjectLoad TRUE)
  19.     {
  20.         parent::__construct($id$callObjectLoad);
  21.         parent::addAttribute('date');
  22.         parent::addAttribute('litro');
  23.         parent::addAttribute('km');
  24.         parent::addAttribute('valor');
  25.         parent::addAttribute('tipo');
  26.         parent::addAttribute('posto');
  27.         parent::addAttribute('responsavel');
  28.         parent::addAttribute('veiculo');
  29.         parent::addAttribute('cod_frente');
  30.     }
  31.     
  32.     /**
  33.      * Method set_tb_frente_class
  34.      * Sample of usage: $tb_abastecimento_class->tb_frente_class = $object;
  35.      * @param $object Instance of TbFrenteClass
  36.      */
  37.     public function set_tb_frente_class(TbFrenteClass $object)
  38.     {
  39.         $this->tb_frente_class $object;
  40.         $this->tb_frente_class_id $object->id;
  41.     }
  42.     
  43.     /**
  44.      * Method get_tb_frente_class
  45.      * Sample of usage: $tb_abastecimento_class->tb_frente_class->attribute;
  46.      * @returns TbFrenteClass instance
  47.      */
  48.     public function get_tb_frente_class()
  49.     {
  50.         // loads the associated object
  51.         if (empty($this->tb_frente_class))
  52.             $this->tb_frente_class = new TbFrenteClass($this->tb_frente_class_id);
  53.     
  54.         // returns the associated object
  55.         return $this->tb_frente_class;
  56.     }
  57. }
  58. ?>


Código do Forms:

  1. <?php
  1. <?php
  2. /**
  3.  * TbAbastecimentoCidadeClassForm Form
  4.  * @author  <your name here>
  5.  */
  6. class TbAbastecimentoCidadeClassForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         
  19.         // creates the form
  20.         $this->form = new BootstrapFormBuilder('form_TbAbastecimentoCidadeClass');
  21.         $this->form->setFormTitle('Cadastro de Abastecimento Cidade');
  22.         
  23.         // create the form fields
  24.         $id = new TEntry('id');
  25.         $date = new TDate('date');
  26.         $litro = new TEntry('litro');
  27.         $km = new TEntry('km');
  28.         $valor = new TEntry('valor');
  29.         $tipo = new TRadioGroup('tipo');
  30.         $posto = new TEntry('posto');
  31.         $responsavel = new TEntry('responsavel');
  32.         $veiculo = new TEntry('veiculo');
  33.         $cod_frente = new TUniqueSearch ('cod_frente''dbagricola''TbFrenteClass''id''id');    
  34.         // add the fields
  35.         $this->form->addFields( [ new TLabel('ID') ], [ $id ] );
  36.         $this->form->addFields( [ new TLabel('Data') ], [ $date ] );
  37.         $this->form->addFields( [ new TLabel('Litros Abastecidos') ], [ $litro ] );
  38.         $this->form->addFields( [ new TLabel('Km do Abastecimento') ], [ $km ] );
  39.         $this->form->addFields( [ new TLabel('Valor') ], [ $valor ] );
  40.         $this->form->addFields( [ new TLabel('Tipo Combustível') ], [ $tipo ] );
  41.         $this->form->addFields( [ new TLabel('Local Abastecimento') ], [ $posto ] );
  42.         $this->form->addFields( [ new TLabel('Responsável') ], [ $responsavel ] );
  43.         $this->form->addFields( [ new TLabel('Veiculo') ], [ $veiculo ] );
  44.         $this->form->addFields( [ new TLabel('Frente') ], [ $cod_frente ] );
  45.         
  46.         // add items radio
  47.         $tipo->addItems(['Gasolina' => 'Gasolina''Etanol' => 'Etanol''Diesel Comum' => 'Diesel Comum']);
  48.         
  49.         //set length
  50.         $cod_frente->setMinlength(0);
  51.         // set sizes
  52.         $id->setSize('100%');
  53.         $date->setSize('100%');
  54.         $litro->setSize('100%');
  55.         $km->setSize('100%');
  56.         $valor->setSize('100%');
  57.         $tipo->setSize('100%');
  58.         $posto->setSize('100%');
  59.         $responsavel->setSize('100%');
  60.         $veiculo->setSize('100%');
  61.         $cod_frente->setSize('100%');
  62.         if (!empty($id))
  63.         {
  64.             $id->setEditable(FALSE);
  65.         }
  66.         
  67.         /** samples
  68.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  69.          $fieldX->setSize( '100%' ); // set size
  70.          **/
  71.          
  72.         // create the form actions
  73.         $btn $this->form->addAction(_t('Save'), new TAction([$this'onSave']), 'fa:save');
  74.         $btn->class 'btn btn-sm btn-primary';
  75.         $this->form->addActionLink(_t('New'),  new TAction([$this'onEdit']), 'fa:eraser red');
  76.         
  77.         // vertical box container
  78.         $container = new TVBox;
  79.         $container->style 'width: 100%';
  80.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  81.         $container->add($this->form);
  82.         
  83.         parent::add($container);
  84.     }
  85.     /**
  86.      * Save form data
  87.      * @param $param Request
  88.      */
  89.     public function onSave$param )
  90.     {
  91.         try
  92.         {
  93.             TTransaction::open('dbagricola'); // open a transaction
  94.             
  95.             /**
  96.             // Enable Debug logger for SQL operations inside the transaction
  97.             TTransaction::setLogger(new TLoggerSTD); // standard output
  98.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  99.             **/
  100.             
  101.             $this->form->validate(); // validate form data
  102.             $data $this->form->getData(); // get form data as array
  103.             
  104.             $object = new TbAbastecimentoCidadeClass;  // create an empty object
  105.             $object->fromArray( (array) $data); // load the object with data
  106.             $object->store(); // save the object
  107.             
  108.             // get the generated id
  109.             $data->id $object->id;
  110.             
  111.             $this->form->setData($data); // fill form data
  112.             TTransaction::close(); // close the transaction
  113.             
  114.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'));
  115.         }
  116.         catch (Exception $e// in case of exception
  117.         {
  118.             new TMessage('error'$e->getMessage()); // shows the exception error message
  119.             $this->form->setData$this->form->getData() ); // keep form data
  120.             TTransaction::rollback(); // undo all pending operations
  121.         }
  122.     }
  123.     
  124.     /**
  125.      * Clear form data
  126.      * @param $param Request
  127.      */
  128.     public function onClear$param )
  129.     {
  130.         $this->form->clear(TRUE);
  131.     }
  132.     
  133.     /**
  134.      * Load object to form data
  135.      * @param $param Request
  136.      */
  137.     public function onEdit$param )
  138.     {
  139.         try
  140.         {
  141.             if (isset($param['key']))
  142.             {
  143.                 $key $param['key'];  // get the parameter $key
  144.                 TTransaction::open('dbagricola'); // open a transaction
  145.                 $object = new TbAbastecimentoCidadeClass($key); // instantiates the Active Record
  146.                 $this->form->setData($object); // fill the form
  147.                 TTransaction::close(); // close the transaction
  148.             }
  149.             else
  150.             {
  151.                 $this->form->clear(TRUE);
  152.             }
  153.         }
  154.         catch (Exception $e// in case of exception
  155.         {
  156.             new TMessage('error'$e->getMessage()); // shows the exception error message
  157.             TTransaction::rollback(); // undo all pending operations
  158.         }
  159.     }
  160. }
  161. ?>


No Class do TbFrenteClass está tudo correto, tanto que funciona em outros formularios.

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


NR

Acho que você está confundindo o TUniqueSearch com o TDBUniqueSearch. Para buscar dados automaticamente do banco de dados, use o TDBUniqueSearch. O TUniqueSearch deve ser alimentado por um array.
JM

Corrigi aqui e realmente era isso mesmo, descuido meu, obrigado!