Lançado Adianti Framework 8.1!
Clique aqui para saber mais
busca dados TDataGridColumn (insolúvel) Pessoal, Estou com erro ao tentar mostrar uma coluna associada no meu Datagrid. Ja tentei todas as dicas que deram aqui no forum sobre o assunto e continuo recebendo erro "Tentativa de acesso a uma propriedade não existente (ocorrencia->navio->nome). Estou utilizando adiante framework 7 Peço por gentileza a ajuda dos amigos e até do Mestre Pablo. // model ocorrencia.php ...
CD
busca dados TDataGridColumn (insolúvel)  
Pessoal,


Estou com erro ao tentar mostrar uma coluna associada no meu Datagrid. Ja tentei todas as dicas que deram aqui no forum sobre o assunto e continuo recebendo erro "Tentativa de acesso a uma propriedade não existente (ocorrencia->navio->nome).

Estou utilizando adiante framework 7

Peço por gentileza a ajuda dos amigos e até do Mestre Pablo.


// model ocorrencia.php

  1. <?php
  2. /**
  3.  * Ocorrencia Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Ocorrencia extends TRecord
  7. {
  8.     const TABLENAME 'ocorrencia';
  9.     const PRIMARYKEY'ID_OCORRENCIA';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     
  12.     
  13.     private $cliente;
  14.     private $navio;
  15.     private $tipo_ocorrencia;
  16.     private $turno;
  17.     /**
  18.      * Constructor method
  19.      */
  20.     public function __construct($id NULL$callObjectLoad TRUE)
  21.     {
  22.         parent::__construct($id$callObjectLoad);
  23.         parent::addAttribute('ID_NAVIO');
  24.         parent::addAttribute('ID_TURNO');
  25.         parent::addAttribute('ID_TIPO_OCORRENCIA');
  26.         parent::addAttribute('ID_CLIENTE');
  27.         parent::addAttribute('DESCRICAO');
  28.         parent::addAttribute('ACAO_IMEDIATA');
  29.         parent::addAttribute('DATA_OCORRENCIA');
  30.         parent::addAttribute('HORA_INI');
  31.         parent::addAttribute('HORA_FIM');
  32.         parent::addAttribute('CHUVA_MM');
  33.         parent::addAttribute('ARQUIVOS_PATH');
  34.     }
  35.     
  36.     /**
  37.      * Method set_cliente
  38.      * Sample of usage: $ocorrencia->cliente = $object;
  39.      * @param $object Instance of cliente
  40.      */
  41.     public function set_cliente(cliente $object)
  42.     {
  43.         $this->cliente $object;
  44.         $this->cliente_id $object->id_cliente;
  45.     }
  46.     
  47.     /**
  48.      * Method get_cliente
  49.      * Sample of usage: $ocorrencia->cliente->attribute;
  50.      * @returns cliente instance
  51.      */
  52.     public function get_cliente()
  53.     {
  54.         // loads the associated object
  55.         if (empty($this->cliente))
  56.             $this->cliente = new cliente($this->cliente_id);
  57.     
  58.         // returns the associated object
  59.         return $this->cliente;
  60.     }
  61.     
  62.     
  63.     /**
  64.      * Method set_navio
  65.      * Sample of usage: $ocorrencia->navio = $object;
  66.      * @param $object Instance of navio
  67.      */
  68.     public function set_navio(navio $object)
  69.     {
  70.         $this->navio $object;
  71.         $this->navio_id $object->id_navio;
  72.     }
  73.     
  74.     /**
  75.      * Method get_navio
  76.      * Sample of usage: $ocorrencia->navio->attribute;
  77.      * @returns navio instance
  78.      */
  79.     public function get_navio()
  80.     {
  81.         // loads the associated object
  82.         if (empty($this->navio))
  83.             $this->navio = new navio($this->navio_id);
  84.     
  85.         // returns the associated object
  86.         return $this->navio;
  87.     }
  88.     
  89.     
  90.     
  91.     
  92.     /**
  93.      * Method set_tipo_ocorrencia
  94.      * Sample of usage: $ocorrencia->tipo_ocorrencia = $object;
  95.      * @param $object Instance of tipo_ocorrencia
  96.      */
  97.     public function set_tipo_ocorrencia(tipo_ocorrencia $object)
  98.     {
  99.         $this->tipo_ocorrencia $object;
  100.         $this->tipo_ocorrencia_id $object->ID_TIPO_OCORRENCIA;
  101.     }
  102.     
  103.     /**
  104.      * Method get_tipo_ocorrencia
  105.      * Sample of usage: $ocorrencia->tipo_ocorrencia->attribute;
  106.      * @returns tipo_ocorrencia instance
  107.      */
  108.     public function get_tipo_ocorrencia()
  109.     {
  110.         // loads the associated object
  111.         if (empty($this->tipo_ocorrencia))
  112.             $this->tipo_ocorrencia = new tipo_ocorrencia($this->tipo_ocorrencia_id);
  113.     
  114.         // returns the associated object
  115.         return $this->tipo_ocorrencia;
  116.     }
  117.     
  118.     
  119.     /**
  120.      * Method set_turno
  121.      * Sample of usage: $ocorrencia->turno = $object;
  122.      * @param $object Instance of turno
  123.      */
  124.     public function set_turno(turno $object)
  125.     {
  126.         $this->turno $object;
  127.         $this->turno_id $object->id_turno;
  128.     }
  129.     
  130.     /**
  131.      * Method get_turno
  132.      * Sample of usage: $ocorrencia->turno->attribute;
  133.      * @returns turno instance
  134.      */
  135.     public function get_turno()
  136.     {
  137.         // loads the associated object
  138.         if (empty($this->turno))
  139.             $this->turno = new turno($this->turno_id);
  140.     
  141.         // returns the associated object
  142.         return $this->turno;
  143.     }
  144.     
  145. }
  146. // model navio.php
  1. <?php
  2. /**
  3.  * Navio Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Navio extends TRecord
  7. {
  8.     const TABLENAME 'bzm_navio';
  9.     const PRIMARYKEY'ID_NAVIO';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     
  12.     
  13.     /**
  14.      * Constructor method
  15.      */
  16.     public function __construct($id NULL$callObjectLoad TRUE)
  17.     {
  18.         parent::__construct($id$callObjectLoad);
  19.         parent::addAttribute('NOME');
  20.         parent::addAttribute('IMO');
  21.         parent::addAttribute('COMPRIMENTO');
  22.         parent::addAttribute('DWT');
  23.         parent::addAttribute('ARMADOR');
  24.         parent::addAttribute('BANDEIRA');
  25.         parent::addAttribute('CALADO_MAX');
  26.         parent::addAttribute('ANO_CONSTRUCAO');
  27.         parent::addAttribute('IDC_GUINCHO');
  28.         parent::addAttribute('IDC_EXCLUIDO');
  29.     }
  30. }

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


MG

Carlos
Se a datagrid está carregando os dados de ocorrência, a referência correta seria:

  1. <?php
  2.    //
  3.     $column_ID_NAVIO = new TDataGridColumn('navio->nome','Navio','left);
  4. ?>


Se observar o model Ocorrencia, você tem o método
get_navio()



O relacionamento no model ocorrencia está errado.
O atributo definido é parent::addAttribute('ID_NAVIO');
Portanto no método set_navio, deveria ser:

  1. <?php
  2.     /**
  3.      * Method set_navio
  4.      * Sample of usage: $ocorrencia->navio = $object;
  5.      * @param $object Instance of navio
  6.      */
  7.     public function set_navio(navio $object)
  8.     {
  9.         $this->navio $object;
  10.         $this->id_navio $object->id_navio// navio_id é o abributo $this (desta classe) 
  11.     }
  12. ?>
CD

Marcelo,

Fiz a mudança e o erro desaparece mas não aparece nada na coluna do Grid fica tudo em branco.
MG

Os nomes das colunas (atributos das tabelas) estão iguais?

tbl_navio = id_navio pk
tbl_ocorrencia = id_navio fk

CD

sim estão iguais
CD

A minha entrada de dados funciona direitinho com TDBCombo mas no datagrid o relaciomanento não funciona
MG

Carlos
Pode compartilhar o método onReload onde você carrega a grid?
CD

Bom dia, Segue todo o fonte do datagrid


  1. <?php
  2. /**
  3.  * ocorrenciaList Listing
  4.  * @author  <your name here>
  5.  */
  6. class ocorrenciaList extends TPage
  7. {
  8.     protected $form;     // registration form
  9.     protected $datagrid// listing
  10.     protected $pageNavigation;
  11.     
  12.     use Adianti\base\AdiantiStandardListTrait;
  13.     
  14.     /**
  15.      * Page constructor
  16.      */
  17.     public function __construct()
  18.     {
  19.         parent::__construct();
  20.         
  21.         $this->setDatabase('datasiop');            // defines the database
  22.         $this->setActiveRecord('ocorrencia');   // defines the active record
  23.         $this->setDefaultOrder('ID_OCORRENCIA''asc');         // defines the default order
  24.         $this->setLimit(10);
  25.         // $this->setCriteria($criteria) // define a standard filter
  26.         $this->addFilterField('ID_NAVIO''like''ID_NAVIO'); // filterField, operator, formField
  27.         $this->addFilterField('ID_TURNO''like''ID_TURNO'); // filterField, operator, formField
  28.         $this->addFilterField('ID_TIPO_OCORRENCIA''like''ID_TIPO_OCORRENCIA'); // filterField, operator, formField
  29.         $this->addFilterField('ID_CLIENTE''like''ID_CLIENTE'); // filterField, operator, formField
  30.         $this->addFilterField('DESCRICAO''like''DESCRICAO'); // filterField, operator, formField
  31.         $this->addFilterField('ACAO_IMEDIATA''like''ACAO_IMEDIATA'); // filterField, operator, formField
  32.         $this->addFilterField('DATA_OCORRENCIA''like''DATA_OCORRENCIA'); // filterField, operator, formField
  33.         $this->addFilterField('HORA_INI''like''HORA_INI'); // filterField, operator, formField
  34.         $this->addFilterField('HORA_FIM''like''HORA_FIM'); // filterField, operator, formField
  35.         $this->addFilterField('CHUVA_MM''like''CHUVA_MM'); // filterField, operator, formField
  36.         $this->form = new TForm('form_search_ocorrencia');
  37.         
  38.         $ID_NAVIO = new TEntry('ID_NAVIO''datasiop''navio''ID_NAVIO''NOME');
  39.         $ID_TURNO = new TEntry('ID_TURNO''datasiop''turno''ID_TURNO''DESCRICAO');
  40.         $ID_TIPO_OCORRENCIA = new TEntry('ID_TIPO_OCORRENCIA''datasiop''tipo_ocorrencia''ID_TIPO_OCORRENCIA''DESCRICAO');
  41.         $ID_CLIENTE = new TEntry('ID_CLIENTE''datasiop''cliente''ID_CLIENTE''NOME');
  42.         $DESCRICAO = new TEntry('DESCRICAO');
  43.         $ACAO_IMEDIATA = new TEntry('ACAO_IMEDIATA');
  44.         $DATA_OCORRENCIA = new TEntry('DATA_OCORRENCIA');
  45.         $HORA_INI = new TEntry('HORA_INI');
  46.         $HORA_FIM = new TEntry('HORA_FIM');
  47.         $CHUVA_MM = new TEntry('CHUVA_MM');
  48.         $ID_NAVIO->exitOnEnter();
  49.         $ID_TURNO->exitOnEnter();
  50.         $ID_TIPO_OCORRENCIA->exitOnEnter();
  51.         $ID_CLIENTE->exitOnEnter();
  52.         $DESCRICAO->exitOnEnter();
  53.         $ACAO_IMEDIATA->exitOnEnter();
  54.         $DATA_OCORRENCIA->exitOnEnter();
  55.         $HORA_INI->exitOnEnter();
  56.         $HORA_FIM->exitOnEnter();
  57.         $CHUVA_MM->exitOnEnter();
  58.         $ID_NAVIO->setSize('100%');
  59.         $ID_TURNO->setSize('100%');
  60.         $ID_TIPO_OCORRENCIA->setSize('100%');
  61.         $ID_CLIENTE->setSize('100%');
  62.         $DESCRICAO->setSize('100%');
  63.         $ACAO_IMEDIATA->setSize('100%');
  64.         $DATA_OCORRENCIA->setSize('100%');
  65.         $HORA_INI->setSize('100%');
  66.         $HORA_FIM->setSize('100%');
  67.         $CHUVA_MM->setSize('100%');
  68.         $ID_NAVIO->tabindex = -1;
  69.         $ID_TURNO->tabindex = -1;
  70.         $ID_TIPO_OCORRENCIA->tabindex = -1;
  71.         $ID_CLIENTE->tabindex = -1;
  72.         $DESCRICAO->tabindex = -1;
  73.         $ACAO_IMEDIATA->tabindex = -1;
  74.         $DATA_OCORRENCIA->tabindex = -1;
  75.         $HORA_INI->tabindex = -1;
  76.         $HORA_FIM->tabindex = -1;
  77.         $CHUVA_MM->tabindex = -1;
  78.         $ID_NAVIO->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  79.         $ID_TURNO->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  80.         $ID_TIPO_OCORRENCIA->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  81.         $ID_CLIENTE->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  82.         $DESCRICAO->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  83.         $ACAO_IMEDIATA->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  84.         $DATA_OCORRENCIA->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  85.         $HORA_INI->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  86.         $HORA_FIM->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  87.         $CHUVA_MM->setExitAction( new TAction([$this'onSearch'], ['static'=>'1']) );
  88.         
  89.         // creates a DataGrid
  90.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  91.         $this->datagrid->style 'width: 100%';
  92.         // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
  93.         
  94.         // creates the datagrid columns
  95.         $column_ID_NAVIO = new TDataGridColumn('navio->nome''Navio''left');
  96.         $column_ID_TURNO = new TDataGridColumn('turno->NOME''Turno''left');
  97.         $column_ID_TIPO_OCORRENCIA = new TDataGridColumn('tipo_ocorrencia->DESCRICAO''Tipo Ocorrência''left');
  98.         $column_ID_CLIENTE = new TDataGridColumn('cliente->NOME''Cliente''left');
  99.         $column_DESCRICAO = new TDataGridColumn('DESCRICAO''Descricao''left');
  100.         $column_ACAO_IMEDIATA = new TDataGridColumn('ACAO_IMEDIATA''Acao Imediata''left');
  101.         $column_DATA_OCORRENCIA = new TDataGridColumn('DATA_OCORRENCIA''Data Ocorrencia''left');
  102.         $column_HORA_INI = new TDataGridColumn('HORA_INI''Hora Ini''left');
  103.         $column_HORA_FIM = new TDataGridColumn('HORA_FIM''Hora Fim''left');
  104.         $column_CHUVA_MM = new TDataGridColumn('CHUVA_MM''Chuva Mm''right');
  105.         // add the columns to the DataGrid
  106.         $this->datagrid->addColumn($column_ID_NAVIO);
  107.         $this->datagrid->addColumn($column_ID_TURNO);
  108.         $this->datagrid->addColumn($column_ID_TIPO_OCORRENCIA);
  109.         $this->datagrid->addColumn($column_ID_CLIENTE);
  110.         $this->datagrid->addColumn($column_DESCRICAO);
  111.         $this->datagrid->addColumn($column_ACAO_IMEDIATA);
  112.         $this->datagrid->addColumn($column_DATA_OCORRENCIA);
  113.         $this->datagrid->addColumn($column_HORA_INI);
  114.         $this->datagrid->addColumn($column_HORA_FIM);
  115.         $this->datagrid->addColumn($column_CHUVA_MM);
  116.         // creates the datagrid column actions
  117.         $column_ID_NAVIO->setAction(new TAction([$this'onReload']), ['order' => 'ID_NAVIO']);
  118.         $column_ID_TURNO->setAction(new TAction([$this'onReload']), ['order' => 'ID_TURNO']);
  119.         $column_ID_TIPO_OCORRENCIA->setAction(new TAction([$this'onReload']), ['order' => 'ID_TIPO_OCORRENCIA']);
  120.         $column_ID_CLIENTE->setAction(new TAction([$this'onReload']), ['order' => 'ID_CLIENTE']);
  121.         
  122.         $action1 = new TDataGridAction(['ocorrenciaForm''onEdit'], ['ID_OCORRENCIA'=>'{ID_OCORRENCIA}']);
  123.         $action2 = new TDataGridAction([$this'onDelete'], ['ID_OCORRENCIA'=>'{ID_OCORRENCIA}']);
  124.         
  125.         $this->datagrid->addAction($action1_t('Edit'),   'far:edit blue');
  126.         $this->datagrid->addAction($action2 ,_t('Delete'), 'far:trash-alt red');
  127.         
  128.         // create the datagrid model
  129.         $this->datagrid->createModel();
  130.         
  131.         // add datagrid inside form
  132.         $this->form->add($this->datagrid);
  133.         
  134.         // create row with search inputs
  135.         $tr = new TElement('tr');
  136.         $this->datagrid->prependRow($tr);
  137.         
  138.         $tr->addTElement::tag('td'''));
  139.         $tr->addTElement::tag('td'''));
  140.         $tr->addTElement::tag('td'$ID_NAVIO));
  141.         $tr->addTElement::tag('td'$ID_TURNO));
  142.         $tr->addTElement::tag('td'$ID_TIPO_OCORRENCIA));
  143.         $tr->addTElement::tag('td'$ID_CLIENTE));
  144.         $tr->addTElement::tag('td'$DESCRICAO));
  145.         $tr->addTElement::tag('td'$ACAO_IMEDIATA));
  146.         $tr->addTElement::tag('td'$DATA_OCORRENCIA));
  147.         $tr->addTElement::tag('td'$HORA_INI));
  148.         $tr->addTElement::tag('td'$HORA_FIM));
  149.         $tr->addTElement::tag('td'$CHUVA_MM));
  150.         $this->form->addField($ID_NAVIO);
  151.         $this->form->addField($ID_TURNO);
  152.         $this->form->addField($ID_TIPO_OCORRENCIA);
  153.         $this->form->addField($ID_CLIENTE);
  154.         $this->form->addField($DESCRICAO);
  155.         $this->form->addField($ACAO_IMEDIATA);
  156.         $this->form->addField($DATA_OCORRENCIA);
  157.         $this->form->addField($HORA_INI);
  158.         $this->form->addField($HORA_FIM);
  159.         $this->form->addField($CHUVA_MM);
  160.         // keep form filled
  161.         $this->form->setDataTSession::getValue(__CLASS__.'_filter_data'));
  162.         
  163.         // create the page navigation
  164.         $this->pageNavigation = new TPageNavigation;
  165.         $this->pageNavigation->setAction(new TAction([$this'onReload']));
  166.         
  167.         $panel = new TPanelGroup('ocorrencia');
  168.         $panel->add($this->form);
  169.         $panel->addFooter($this->pageNavigation);
  170.         
  171.         // header actions
  172.         $dropdown = new TDropDown(_t('Export'), 'fa:list');
  173.         $dropdown->setPullSide('right');
  174.         $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
  175.         $dropdown->addAction_t('Save as CSV'), new TAction([$this'onExportCSV'], ['register_state' => 'false''static'=>'1']), 'fa:table blue' );
  176.         $dropdown->addAction_t('Save as PDF'), new TAction([$this'onExportPDF'], ['register_state' => 'false''static'=>'1']), 'far:file-pdf red' );
  177.         $panel->addHeaderWidget$dropdown );
  178.         
  179.         $panel->addHeaderActionLink_t('New'),  new TAction(['ocorrenciaForm''onEdit'], ['register_state' => 'false']), 'fa:plus green' );
  180.         
  181.         // vertical box container
  182.         $container = new TVBox;
  183.         $container->style 'width: 100%';
  184.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  185.         $container->add($panel);
  186.         
  187.         parent::add($container);
  188.     }
  189. }
  190. </your>
MG

Acredito que seja algum detalhe que não estou conseguindo ver.

Eu não utilizo trait, pois fica mais fácil de debugar.

Mas você pode alternativamente usar "setTransformer" para exibir o nome do navio.

Faz o seguinte:

  1. <?php
  2.  
  3.     $column_ID_NAVIO->setTransformer(function($value$object$row){
  4.          // implemente no modelo Navio um método estático para recuperar o nome
  5.           return Navio::getNomeNavio($value);
  6.      });
  7. ?>