Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Apresentar informação associada no detail Duvida Formulário Mestre/Detalhe Possuo uma base de dados com tabelas pessoa, pessoaDetalhe e Detalhe. Criei as classes Pessoa, PessoaDetalhe e Detalhe e um formulário Mestre/Detalhe onde a classe Modelo mestre é a classe Pessoa e a detalhe é PessoaDetalhe. Bom... Sou novo no Framework e POO e não entendi em 100% o código...
JF
Apresentar informação associada no detail  
Fechado
Duvida Formulário Mestre/Detalhe

Possuo uma base de dados com tabelas pessoa, pessoaDetalhe e Detalhe. Criei as classes Pessoa, PessoaDetalhe e Detalhe e um formulário Mestre/Detalhe onde a classe Modelo mestre é a classe Pessoa e a detalhe é PessoaDetalhe.
Bom... Sou novo no Framework e POO e não entendi em 100% o código do formulário, e (como mostra a figura em anexo) gostaria de substituir a coluna iddetalhe pela descrição do detalhe. Acho que a solução está na linha que mostro abaixo, mas ainda não consegui. Alguém poderia me ajudar???
<php
{...}
// items
$this->detail_list->addQuickColumn('Iddetalhe', 'iddetalhe', 'left', 100);
// já experimeintei ('Iddetalhe', 'detalhe', 'left', 100)
// ('Iddetalhe', 'detalhe->detalhe', 'left', 100)

$this->detail_list->addQuickColumn('Pessoadetalhe', 'pessoadetalhe', 'left', 200);
$this->detail_list->createModel();

$row = $table_detail->addRow();
$row->addCell($this->detail_list);
{...}
?>

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


JR

Dê uma olhadinha nos métodos onSaveDetail(), onReload() e onEdit().

onSaveDetail() salva em sessão os registros até o registro mestre ser gravado.
onReload() é executado pelo método show() assim que a página é carregada.
onEdit() carrega o formulário com os dados a serem editados.

Você precisa alterar o registro antes de apresentar em tela.

  1. <?php
  2. items TSession::getValue(__CLASS__.'_items');
  3.             $key = empty($data->detail_id) ? 'X'.mt_rand(10000000001999999999) : $data->detail_id;
  4.             
  5.             $veiculo = new Veiculo($data->detail_marca_id);            
  6.             $items$key ] = array();
  7.             $items$key ]['id'] = $key;
  8.             // quero que apareça o nome e não o id então devo substituir $data->detail_marca_id por  $veiculo->marca->nome;
  9.             $items$key ]['marca'] = strtoupper($data->detail_marca_id); 
  10.             $items$key ]['modelo'] = strtoupper($data->detail_modelo);
  11.             $items$key ]['ano'] = $data->detail_ano;
  12.             $items$key ]['placa'] = strtoupper($data->detail_placa);
  13.             $items$key ]['odometro'] = $data->detail_odometro;
  14. ?>


Para buscar o nome deve-se utilizar o lazy load, Ex. no model Veiculo.class.php tenho o seguinte

  1. <?php
  2. public function get_marca()
  3.     {
  4.         // loads the associated object
  5.         if (empty($this->marca))
  6.             $this->cliente = new Marca($this->marca_id);
  7.     
  8.         // returns the associated object
  9.         return $this->marca;
  10.     }
  11. ?>


Espero que tenha ficado claro.
JR

Só uma correção,

  1. <?php
  2.  $veiculo = new Veiculo($data->detail_marca_id);  
  3. // correto é o $key que no meu caso é o id para instanciar o Veiculo.
  4.  $veiculo = new Veiculo($key);  
  5. ?>
JF

Cara, é muito bom e fácil. Valeu a dica!!
Muito obrigado João Renato, bombou!!!!