Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Acessar objeto associado dentro de um DataGrid Olá! Novamente tenho uma questão boa... pelo menso acretido que sim... Tenho um activerecord que trabalha em uma tabela responsavel pelos perfis de usuários: ...
MD
Acessar objeto associado dentro de um DataGrid  
Fechado
Olá!

Novamente tenho uma questão boa... pelo menso acretido que sim...

Tenho um activerecord que trabalha em uma tabela responsavel pelos perfis de usuários:

  1. <?php
  2. class Perfil extends TRecord
  3. {
  4.     const TABLENAME 'public.perfis_usuarios';
  5.     const PRIMARYKEY'id';
  6.     const IDPOLICY =  'serial'// {max, serial}
  7.     
  8.     
  9.     /**
  10.      * Constructor method
  11.      */
  12.     public function __construct(506 NULL)
  13.     {
  14.         parent::__construct(506);
  15.         parent::addAttribute('nome');
  16.         parent::addAttribute('descricao');
  17.     }
  18. }
  19. ?>


Há uma outra classe, que gerencia os usuários e que esta associada a classe dos perfis, pois cada usuário tem um perfil.

Se faço o seguinte consigo acesso ao nome do perfil.

  1. <?php
  2.         TTransaction::open('banco');
  3.         
  4.         $teste = new Usuario('1');
  5.         
  6.         echo $teste->perfil->nome;
  7.         
  8.         TTransaction::close();
  9. ?>


Já em um datagrid, quando monto as colunas, faço algo assim e tenho o acesso ao ID normalmente:

  1. <?php
  2.         506   = new TDataGridColumn('id''id''right'10);
  3. ?>


Mas, tenho que colocar o perfil do usuário nessa mesma listagem, logo, faço algo assim:

  1. <?php
  2.         506   = new TDataGridColumn('perfil->nome''id''right'10);
  3. ?>


Mas, não tive sucesso, pois esse código sempre retorna null.

Pergunto, há alguma forma de acessar um objeto associado dentro de uma listagem?

Agradeço desde já a atenção.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (1)


PD

Oi Marco,

Você deve criar um método, tipo get_nome_perfil() no Active Record. Já na datagrid, você usa:
  1. <?php
  2. $perfil   = new TDataGridColumn('nome_perfil''id''right'10); 
  3. ?>


Esse método deve retornar o nome do perfil, baseado no ID da pessoa.

No tutor, na Active Record Customer, tem um assim pra retornar o nome da cidade:

  1. <?php
  2. class Customer extends TRecord
  3. {
  4.     public function get_city_name()
  5.     {
  6.         if (empty($this->city))
  7.         {
  8.             $this->city = new City($this->city_id);
  9.         }
  10.         return $this->city->name;
  11.     }
  12.     ...
  13. }
  14. ?>


Aqui tem um link para o exemplo. Veja aqui que o nome da cidade é obtido por essa técnica.
www.adianti.com.br/doc-framework-Organization-ComplexViews-CustomerD

Acredito que se você ler essa dúvida já resolvida, irá ajudar também:
www.adianti.com.br/forum/pt/view_487?alterar-valor-da-linha-do-datag

abraços!
Pablo