Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Problema com sessions Prezados, boa tarde. Estou enfrentado um problema ao criar um DataGrid. Tenho uma tabela com com 4 colunas: ID, Nome, Unidade e Apartamento. As colunas ID e Nome retorna os valores corretos, as colunas Unidade e Apartamento retornam o ID delas em suas devidas tabelas, porém desejo que o nome sejá retornado. Poderiam me ajudar, com alguma ideia, por favor? Pensei e pensei mas não me veio uma sol...
PA
Problema com sessions  
Prezados, boa tarde. Estou enfrentado um problema ao criar um DataGrid. Tenho uma tabela com com 4 colunas: ID, Nome, Unidade e Apartamento. As colunas ID e Nome retorna os valores corretos, as colunas Unidade e Apartamento retornam o ID delas em suas devidas tabelas, porém desejo que o nome sejá retornado. Poderiam me ajudar, com alguma ideia, por favor? Pensei e pensei mas não me veio uma solução plausível.

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


PA

  1. <?php
  2. class ListaBuscaTeste extends TStandardList
  3. {
  4.     protected $form;     // registration form
  5.     protected $datagrid// listing
  6.     protected $pageNavigation;
  7.     
  8.     protected $estabelecimento;
  9.     /**
  10.      * Class constructor
  11.      * Creates the page, the form and the listing
  12.      */
  13.     public function __construct()
  14.     {
  15.         parent::__construct();
  16.         
  17.         $this->setDatabase('permission');        // defines the database
  18.         $this->setActiveRecord('Pessoa');       // defines the active record
  19.         $this->addFilterField('nome''like''nome'); // filter field, operator, form field
  20.         $this->setDefaultOrder('id''asc');  // define the default order
  21.     
  22.         // creates the form
  23.         $this->form = new BootstrapFormBuilder('form_search_City');
  24.         $this->form->setFormTitle('Lista Busca Teste');
  25.         $nome = new TEntry('nome');
  26.         $unidade = new TDBCombo('fk_id_dados_unidade''permission''Unidade''id''nome');
  27.         $this->form->addFields( [new TLabel('Nome:')], [$nome] );
  28.         $this->form->addFields( [new TLabel('Apartamento/Casa:')], [$unidade] );
  29.         
  30.         // add form actions
  31.         $this->form->addAction('Encontrar', new TAction([$this'onSearch']), 'fa:search white')->class 'btn btn-sm btn-primary';
  32.         $this->form->addActionLink('Limpar',  new TAction([$this'clear']), 'fa:eraser white')->class 'btn btn-sm btn-info';
  33.         $this->form->addActionLink('New',  new TAction(['PessoaForm''onEdit']), 'fa:plus white')->class 'btn btn-sm btn-success';
  34.         
  35.         // keep the form filled with the search data
  36.         $this->form->setDataTSession::getValue('StandardDataGridView_filter_data') );
  37.         
  38.         // creates the DataGrid
  39.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  40.         $this->datagrid->width "100%";
  41.         
  42.         // creates the datagrid columns
  43.         $col_id    = new TDataGridColumn('id''Id''right''10%');
  44.         $col_nome  = new TDataGridColumn('nome''Nome''left''25%');
  45.         $col_unidade = new TDataGridColumn('fk_id_dados_unidade''Unidade''center''25%');
  46.         $col_apartamento = new TDataGridColumn('fk_id_system_unit''Apartamento/Casa''center''40%');  
  47.         
  48.         $this->datagrid->addColumn($col_id);
  49.         $this->datagrid->addColumn($col_nome);
  50.         $this->datagrid->addColumn($col_unidade);
  51.         $this->datagrid->addColumn($col_apartamento);
  52.         
  53.         $col_id->setAction( new TAction([$this'onReload']),   ['order' => 'id']);
  54.         $col_nome->setAction( new TAction([$this'onReload']), ['order' => 'nome']);
  55.         $col_unidade->setAction( new TAction([$this'onReload']), ['order' => 'fk_id_dados_unidade']);
  56.         $col_apartamento->setAction( new TAction([$this'onReload']), ['order' => 'fk_id_system_unit']);
  57.         
  58.         $action1 = new TDataGridAction([$this'onEdit']);
  59.         $action1->setLabel('Editar');
  60.         $action1->setImage('fa:edit blue');
  61.         $action1->setFields(['id']);
  62.         $this->datagrid->addAction($action1);
  63.         
  64.         $action2 = new TDataGridAction([$this'onDelete']);
  65.         $action2->setLabel('Deletar');
  66.         $action2->setImage('fa:trash red');
  67.         $action2->setFields(['id']);
  68.         $this->datagrid->addAction($action2);
  69.         
  70.         // create the datagrid model
  71.         $this->datagrid->createModel();
  72.         
  73.         // creates the page navigation
  74.         $this->pageNavigation = new TPageNavigation;
  75.         $this->pageNavigation->setAction(new TAction(array($this'onReload')));
  76.         $this->pageNavigation->setWidth($this->datagrid->getWidth());
  77.         
  78.         // creates the page structure using a table
  79.         $vbox = new TVBox;
  80.         $vbox->style 'width: 100%';
  81.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  82.         $vbox->add($this->form);
  83.         $vbox->add(TPanelGroup::pack(''$this->datagrid$this->pageNavigation));
  84.         
  85.         // add the table inside the page
  86.         parent::add($vbox);
  87.     }
  88.     
  89.     /**
  90.      * Clear filters
  91.      */
  92.     function clear()
  93.     {
  94.         $this->clearFilters();
  95.         $this->onReload();
  96.     }
  97.     function onEdit()
  98.     {
  99.     }
  100. }
  101. ?>
JS

Peter

Na classe Model pessoa você tem que acrescentar os métodos set e get do relacionamento com as outras tabelas para retornarem os nomes que você quer.

Não estou no momento na frente do computador para te enviar o código, mas no tutor tem exemplo
JS

Peter

Na classe Model pessoa você tem que acrescentar os métodos set e get do relacionamento com as outras tabelas para retornarem os nomes que você quer.

Não estou no momento na frente do computador para te enviar o código, mas no tutor tem exemplo
FR

Peter bom dia, como o colega acima disse, você precisa implementar os métodos get e set dentro da classe model.
Vou usar o exemplo das video aulas pra te mostrar como:

A classe filme tem relacionamento com gênero e com distribuidor, que são outras classes que se ligam através de FKs em Filme, "genero_id" e "distribuidor_id".

Declare os privates dessas classes relacionadas e os métodos como abaixo:
  1. <?php
  2. class Filme extends TRecord
  3. {
  4.     const TABLENAME 'filme';
  5.     const PRIMARYKEY 'id';
  6.     const IDPOLICY 'serial';
  7.     
  8.     private $genero;
  9.     private $distribuidor;
  10.     
  11.     public function __construct$id NULL )
  12.     {
  13.         parent::__construct$id );
  14.         
  15.         parent::addAttribute('titulo');
  16.         parent::addAttribute('duracao');
  17.         parent::addAttribute('dt_lcto');
  18.         parent::addAttribute('orcamento');
  19.         parent::addAttribute('distribuidor_id');
  20.         parent::addAttribute('genero_id');
  21.         
  22.     }
  23.     
  24.     public function set_generoGenero $obj)
  25.     {
  26.         $this->genero $obj;
  27.         $this->genero_id $obj->id;
  28.     }
  29.     
  30.     public function set_distribuidorDistribuidor $obj)
  31.     {
  32.         $this->distribuidor $obj;
  33.         $this->distribuidor_id $obj->id;
  34.     }
  35.     
  36.     public function get_genero()
  37.     {
  38.         if(empty($this->genero))
  39.         {
  40.             $this->genero = new Genero$this->genero_id );
  41.         }
  42.         
  43.         return $this->genero;
  44.     }
  45.     public function get_distribuidor()
  46.     {
  47.         if(empty($this->distribuidor))
  48.         {
  49.             $this->distribuidor = new Distribuidor$this->distribuidor_id );
  50.         }
  51.         
  52.         return $this->distribuidor;
  53.     }
  54. }
  55. ?>


Dessa forma você pode acessar qualquer atributo da classe relacionada por exemplo:
  1. <?php
  2. $filme = new Filme(2);
  3. //printar o atributo nome da classe genero relacionada com filme de id =2.
  4. echo $filme->genero->nome;
  5. //printar o atributo nome da classe distribuidor relacionada com filme de id =2.
  6. echo $filme->distribuidor->nome;
  7. ?>

Ou então, no seu caso, na coluna da data grid você pode colocar "unidade->nome" e ''apartamento->nome'' dependendo só do atributo que você quer mostrar como valor da coluna, só com essa notação e com os metódos na classe já vão ser chamadas as informações corretas.
PA

Agradeço pelos comentários, sanaram minhas dúvidas. Um grande abraço.