menu
Fórum Adianti
menu Menu
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.

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