Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Exibir o dados do objeto associado. Prezados bom dia, Estou implementando uma tela que faz associação entre dois objetos. Tenho um objeto Viagem que possui 1 ou mais veículos, conforme imagem em anexo. A classe veículo possui um tipo (cavalo, semi reboque 1, semi reboque 2 e semi reboque 3) No formulário, implementei 4 campos para o usuário informar os veículos (cavalo mecânico, semi reboque 1 e semi reboque 2 e ...
CG
Exibir o dados do objeto associado.  
Fechado
Prezados bom dia,

Estou implementando uma tela que faz associação entre dois objetos.

Tenho um objeto Viagem que possui 1 ou mais veículos, conforme imagem em anexo. A classe veículo possui um tipo (cavalo, semi reboque 1, semi reboque 2 e semi reboque 3)

No formulário, implementei 4 campos para o usuário informar os veículos (cavalo mecânico, semi reboque 1 e semi reboque 2 e semi reboque 3). O campo cavalo mecânico é obrigatório.

Consigo gravar os dados dos veículos que o usuário informa.

O meu problema é quando recupero os dados e tenho que exibir os dados corretamente em cada campo (cavalo mecânico, semi reboque 1 e semi reboque 2 e semi reboque 3).

Consigo exibir o dado para o usuário, porém se o usuário alterar o veículo, o sistema não atualiza o registro.

Segue o meu código que fiz:

  1. <?php
  2. /**
  3.  * Viagem Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Viagem extends TRecord
  7. {
  8.     const TABLENAME 'tblviagem';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.     
  12.     
  13.     private $viagem_veiculos;
  14.     /**
  15.      * Constructor method
  16.      */
  17.     public function __construct(835 NULL$callObjectLoad TRUE)
  18.     {
  19.         parent::__construct(835$callObjectLoad);
  20.         parent::addAttribute('datacadastro');
  21.         parent::addAttribute('motorista_id');
  22.         parent::addAttribute('agente_id');
  23.         parent::addAttribute('cliente_id');
  24.         parent::addAttribute('flgtomador');
  25.         parent::addAttribute('fretereceber_id');
  26.         parent::addAttribute('datacancelamento');
  27.         parent::addAttribute('datainicio');
  28.         parent::addAttribute('datafinalizacao');
  29.         parent::addAttribute('dadosgeraisfretereceber_id');
  30.     }
  31.     
  32.     /**
  33.      * Method addViagemVeiculo
  34.      * Add a ViagemVeiculo to the Viagem
  35.      * @param $object Instance of ViagemVeiculo
  36.      */
  37.     public function addViagemVeiculo(ViagemVeiculo $object)
  38.     {
  39.         $this->viagem_veiculos[] = $object;
  40.     }
  41.     
  42.     /**
  43.      * Method getViagemVeiculos
  44.      * Return the Viagem' ViagemVeiculo's
  45.      * @return Collection of ViagemVeiculo
  46.      */
  47.     public function getViagemVeiculos()
  48.     {
  49.         return $this->viagem_veiculos;
  50.     }
  51.     /**
  52.      * Reset aggregates
  53.      */
  54.     public function clearParts()
  55.     {
  56.         $this->viagem_veiculos = array();
  57.     }
  58.     /**
  59.      * Load the object and its aggregates
  60.      * @param 835 object ID
  61.      */
  62.     public function load(835)
  63.     {
  64.     
  65.        $this->viagem_veiculos parent::loadComposite('ViagemVeiculo''viagem_id'835);
  66.        
  67.        return parent::load(835);
  68.        
  69.     }
  70.     /**
  71.      * Store the object and its aggregates
  72.      */
  73.     public function store()
  74.     {
  75.          
  76.           
  77.       parent::store();
  78.     
  79.       parent::saveComposite('ViagemVeiculo''viagem_id'$this->id$this->viagem_veiculos);    
  80.             
  81.     }
  82.     /**
  83.      * Delete the object and its aggregates
  84.      * @param 835 object ID
  85.      */
  86.     public function delete(835 NULL)
  87.     {
  88.         parent::deleteComposite('ViagemVeiculo''viagem_id'835);
  89.     
  90.         // delete the object itself
  91.         parent::delete(835);
  92.      
  93.    }
  94.     
  95.     public function get_cliente(){
  96.           $cliente = new DadosGerais($this->cliente_id);
  97.           return $cliente;  
  98.     }
  99.      public function get_DataInicioFormatada(){
  100.          //$viagem = new Viagem($this->id);
  101.          
  102.          return TDate::date2br($this->datainicio);
  103.      
  104.      }
  105.      
  106.      public function get_DataCadastroFormatada(){
  107.          
  108.          return  TDateSollaris::date2brdatahora($this->datacadastro);
  109.      }
  110.      
  111.      public function get_NomeAgente(){
  112.          $agente = new DadosGerais($this->agente_id);
  113.          return $agente->razaoSocial;
  114.      
  115.      }
  116.      public function get_NomeCliente(){
  117.          $agente = new DadosGerais($this->cliente_id);
  118.          return $agente->razaoSocial;
  119.      
  120.      }
  121.      
  122.      public function get_NomeMotorista(){
  123.          $motorista = new Motorista($this->motorista_id);
  124.          return $motorista->nome;
  125.      }
  126.      
  127.    
  128.     public function get_cavalo_id(){
  129.         try
  130.         {
  131.             TTransaction::open('sollus');
  132.             $criteria = new TCriteria;
  133.             $criteria->add( new TFilter'viagem_id''='$this->id ));
  134.             $criteria->add( new TFilter'tipo''=''cv' ));
  135.             
  136.             $cavalos ViagemVeiculo::getObjects($criteria);
  137.             $cavalo_id 0;
  138.             
  139.             foreach ($cavalos as $cavalo)
  140.             {
  141.                 $cavalo_id $cavalo->veiculo_id;
  142.                 
  143.             }
  144.             return $cavalo_id;
  145.             
  146.             TTransaction::close();
  147.         }
  148.         catch (Exception $e)
  149.         {
  150.             new TMessage('error'$e->getMessage());
  151.         }     
  152.      }
  153.      
  154. }
  155. ?>

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)


PD

Na ação de salvar do formulário, você precisa limpar os objetos relacionados:

$viagem->clearParts();

E posteriormente adicionar os dados novamente vindos do form:
$data = $this->form->getData();
$viagem->addViagemVeiculo( new ViagemVeiculo($data->id_cavalo) );
$viagem->addViagemVeiculo( new ViagemVeiculo($data->id_semireboque) );
$viagem->addViagemVeiculo( new ViagemVeiculo($data->id_semireboque2) );

E então salvar:
$viagem->store();

Entretanto, me parece que a modelagem não está correta. Será que não ficaria melhor termos o seguinte?
Viagem ---<agregação>---Veículo

Assim, você poderia adicionar veículos à uma viagem por meio de um objeto do tipo TMultiField, e não ficaria limitado quanto à quantidade de campos no formulário... Algo parecido com o que temos nessa tela do livro em relação aos seus autores (é preciso logar antes com ana/test):
www.adianti.com.br/framework_files/library/index.php?class=BookForm&

Att,
Pablo
CG

Prezado Pablo,

Farei desta maneira.

Obrigado pela ajuda.