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


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(1000000000, 1999999999) : $data->detail_id;
  4. $veiculo = new Veiculo($data->detail_marca_id);
  5. $items[ $key ] = array();
  6. $items[ $key ]['id'] = $key;
  7. // quero que apareça o nome e não o id então devo substituir $data->detail_marca_id por $veiculo->marca->nome;
  8. $items[ $key ]['marca'] = strtoupper($data->detail_marca_id);
  9. $items[ $key ]['modelo'] = strtoupper($data->detail_modelo);
  10. $items[ $key ]['ano'] = $data->detail_ano;
  11. $items[ $key ]['placa'] = strtoupper($data->detail_placa);
  12. $items[ $key ]['odometro'] = $data->detail_odometro;
  13. ?>


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. // returns the associated object
  8. return $this->marca;
  9. }
  10. ?>


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