Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Problema ao Carregar Nome da Cidade da Tabela Cliente Boa tarde a todos, estou começando com Framework e não estou conseguindo coletar o nome da cidade para inserir no datagrid. Tenho a tabela chamada cliente, que por sua vez tem o id da cidade na coluna chamada cidade. model: ...
WS
Problema ao Carregar Nome da Cidade da Tabela Cliente  
Boa tarde a todos,

estou começando com Framework e não estou conseguindo coletar o nome da cidade para inserir no datagrid.
Tenho a tabela chamada cliente, que por sua vez tem o id da cidade na coluna chamada cidade.

model:

  1. <?php
  2. class Cliente extends TRecord
  3. {
  4.     const TABLENAME  'cliente';
  5.     const PRIMARYKEY 'id';
  6.     const IDPOLICY   =  'max'// {max, serial}
  7.     
  8.     const CREATEDAT 'created_at';
  9.     const UPDATEDAT 'updated_at';
  10.     
  11.     /**
  12.      * Constructor method
  13.      */
  14.     public function __construct($id NULL$callObjectLoad TRUE)
  15.     {
  16.         //aba cliente
  17.         parent::__construct($id$callObjectLoad);
  18.         parent::addAttribute('razao');
  19.         parent::addAttribute('fantasia');
  20.         parent::addAttribute('tipo_pessoa');        
  21.         parent::addAttribute('cnpj_cpf');
  22.         parent::addAttribute('ie_identidade');
  23.         parent::addAttribute('inscricao_municipal');
  24.         parent::addAttribute('contribuinte_icms');
  25.         parent::addAttribute('data_nascimento');
  26.         parent::addAttribute('ativo');
  27.         parent::addAttribute('filial_id');
  28.         parent::addAttribute('sexo');
  29.         parent::addAttribute('grau_satisfacao');
  30.         parent::addAttribute('data_cadastro');
  31.         
  32.         //aba endereço          
  33.         //parent::addAttribute('*condominio*');
  34.         //parent::addAttribute('*CEP*');
  35.         parent::addAttribute('endereco');
  36.         parent::addAttribute('numero');
  37.         parent::addAttribute('complemento');
  38.         //parent::addAttribute('*pais*'); 
  39.         parent::addAttribute('cidade');
  40.         parent::addAttribute('uf');
  41.         parent::addAttribute('cond_pagamento');
  42.         parent::addAttribute('bairro');
  43.     
  44.         //aba contato
  45.         //parent::addAttribute('*Telefone Residencial*');
  46.         parent::addAttribute('telefone_comercial');
  47.         parent::addAttribute('telefone_celular');
  48.         //parent::addAttribute('*Telefone Celular 2*');
  49.         parent::addAttribute('email');
  50.         parent::addAttribute('contato');
  51.         parent::addAttribute('hotsite_email');
  52.         parent::addAttribute('hotsite_acesso');
  53.         
  54.         //aba CRM        
  55.         parent::addAttribute('crm');
  56.         parent::addAttribute('id_canal_venda');
  57.         parent::addAttribute('id_concorrente');
  58.         parent::addAttribute('responsavel');
  59.         parent::addAttribute('status_prospeccao');
  60.         parent::addAttribute('participa_pre_cobranca');
  61.         parent::addAttribute('cob_envia_email');
  62.         parent::addAttribute('cob_envia_sms'); 
  63.         //aba outros    
  64.         parent::addAttribute('id_conta');
  65.         parent::addAttribute('id_vendedor');      
  66.    
  67.     }
  68.     
  69.     public function get_cidade()
  70.     {
  71.        return Cidade::find($this->cidade); 
  72.        //$this->cidade = new Cidade( $this->cidade );       
  73.        //return $this->cidade;        
  74.     }
  75.     
  76.     public function get_uf()
  77.     {
  78.         return Estado::find($this->uf);
  79.     }
  80.     
  81.     public function get_grupo()
  82.     {
  83.         return Grupo::find($this->grupo_id);
  84.     }
  85.     
  86.     public function delete($id null)
  87.     {
  88.         $id = isset($id) ? $id $this->id;
  89.         
  90.         PessoaPapel::where('pessoa_id''='$this->id)->delete();
  91.         parent::delete($id);
  92.     }
  93. }
  94. ?>


Cliente List:
  1. <?php
  2. /**
  3.  * ClienteList
  4. class ClienteList extends TPage
  5. {
  6.     protected $form;     // registration form
  7.     protected $datagrid; // listing
  8.     protected $pageNavigation;
  9.     protected $formgrid;
  10.     protected $deleteButton;
  11.     
  12.     use Adianti\base\AdiantiStandardListTrait;
  13.     
  14.     /**
  15.      * Page constructor
  16.      */
  17.     public function __construct()
  18.     {
  19.         parent::__construct();
  20.         
  21.         $this->setDatabase('IXC_teste');            // defines the database
  22.         $this->setActiveRecord('Cliente');   // defines the active record
  23.         $this->setDefaultOrder('id''asc');         // defines the default order
  24.         $this->setLimit(10);
  25.         // $this->setCriteria($criteria) // define a standard filter
  26.         $this->addFilterField('id''=''id'); // filterField, operator, formField
  27.         $this->addFilterField('razao''like''cliente'); // filterField, operator, formField
  28.         $this->addFilterField('fantasia''like''cliente'); // filterField, operator, formField
  29.         $this->addFilterField('fone''like''fone'); // filterField, operator, formField
  30.         $this->addFilterField('endereco''like''logradouro'); // filterField, operator, formField
  31.         $this->addFilterField('numero''=''numero'); // filterField, operator, formField
  32.         $this->addFilterField('bairro''=''bairro'); // filterField, operator, formField
  33.         $this->addFilterField('cidade''=''cidade'); // filterField, operator, formField
  34.         $this->addFilterField('uf''=''estado'); // filterField, operator, formField
  35.         $this->addFilterField('status_acesso''=''status'); // filterField, operator, formField
  36.         
  37.         // creates the form
  38.         $this->form = new BootstrapFormBuilder('form_search_Cliente');
  39.         $this->form->setFormTitle('Cliente');
  40.         
  41.         // create the form fields
  42.         $id = new TEntry('id');
  43.         $cliente = new TEntry('razao_social');
  44.         $fone = new TEntry('fone');
  45.         $logradouro = new TEntry('endereco');
  46.         $numero = new TEntry('numero');
  47.         $bairro = new TEntry('bairro');
  48.         $cidade = new TEntry('cidade');
  49.         $uf = new TEntry('uf');
  50.         $status = new TEntry('status_internet');
  51.           
  52.         //$grupo_id = new TDBUniqueSearch('grupo_id', 'IXC_teste', 'Grupo', 'id', 'nome');
  53.         //$grupo_id->setMinLength(0);
  54.         // add the fields
  55.         $this->form->addFields( [ new TLabel('Id') ], [ $id ] );
  56.         $this->form->addFields( [ new TLabel('Cliente') ], [ $cliente ] );
  57.         $this->form->addFields( [ new TLabel('Fone') ], [ $fone ] );
  58.         $this->form->addFields( [ new TLabel('Logradouro') ], [ $logradouro ] );
  59.         $this->form->addFields( [ new TLabel('Número') ], [ $numero ] );
  60.         $this->form->addFields( [ new TLabel('Bairro') ], [ $bairro ] );
  61.         $this->form->addFields( [ new TLabel('Cidade') ], [ $cidade ] );
  62.         $this->form->addFields( [ new TLabel('Estado') ], [ $uf ] );
  63.         $this->form->addFields( [ new TLabel('Status Internet') ], [ $status ] );
  64.         // set sizes
  65.         $id->setSize('100%');
  66.         $cliente->setSize('100%');
  67.         $fone->setSize('100%');
  68.         $logradouro->setSize('100%');
  69.         $numero->setSize('100%');
  70.         $bairro->setSize('100%');
  71.         $cidade->setSize('100%');
  72.         $uf->setSize('100%');
  73.         $status->setSize('100%');
  74.       
  75.         
  76.         // keep the form filled during navigation with session data
  77.         $this->form->setDataTSession::getValue(__CLASS__.'_filter_data') );
  78.         
  79.         // add the search form actions
  80.         $btn $this->form->addAction(_t('Find'), new TAction([$this'onSearch']), 'fa:search');
  81.         $btn->class 'btn btn-sm btn-primary';
  82.         $this->form->addActionLink(_t('New'), new TAction(['ClienteForm''onEdit']), 'fa:plus green');
  83.         
  84.         // creates a Datagrid
  85.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  86.         $this->datagrid->style 'width: 100%';
  87.         //$this->datagrid->datatable = 'true';
  88.         // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
  89.         
  90.         // creates the datagrid columns
  91.         $column_id = new TDataGridColumn('id''Id''left');
  92.         $column_cliente = new TDataGridColumn('razao''Cliente''left');
  93.         $column_fone = new TDataGridColumn('fone''Fone''left');
  94.         $column_logradouro = new TDataGridColumn('endereco''Logradouro''left');
  95.         $column_numero = new TDataGridColumn('numero''Número''left');
  96.         $column_bairro = new TDataGridColumn('bairro''Bairro''left');
  97.         $column_cidade = new TDataGridColumn('cidade->nome''Cidade''left'); 
  98.         $column_uf = new TDataGridColumn('uf->nome''Estado''left');
  99.         $column_status = new TDataGridColumn('status''Status''left');
  100.         
  101.         //$column_grupo_id = new TDataGridColumn('status_internet->nome', 'Status', 'left');
  102.         
  103.         
  104.         //$column_grupo_id = new TDataGridColumn('grupo->nome', 'Grupo', 'left');
  105.         
  106.         $column_fone->enableAutoHide(500);
  107.        // $column_email->enableAutoHide(500);
  108.        // $column_grupo_id->enableAutoHide(500);
  109.         
  110.         // add the columns to the DataGrid
  111.         $this->datagrid->addColumn($column_id);
  112.         $this->datagrid->addColumn($column_cliente);
  113.         $this->datagrid->addColumn($column_fone);
  114.         $this->datagrid->addColumn($column_logradouro);
  115.         $this->datagrid->addColumn($column_numero);
  116.         $this->datagrid->addColumn($column_bairro);
  117.         $this->datagrid->addColumn($column_cidade);
  118.         $this->datagrid->addColumn($column_uf);
  119.         $this->datagrid->addColumn($column_status);
  120.         
  121.         $column_id->setAction(new TAction([$this'onReload']), ['order' => 'id']);
  122.         $column_cliente->setAction(new TAction([$this'onReload']), ['order' => 'cliente']);
  123.         
  124.         $action1 = new TDataGridAction(['ClienteFormView''onEdit'], ['id'=>'{id}''register_state' => 'false']);
  125.         $action2 = new TDataGridAction(['ClienteForm''onEdit'], ['id'=>'{id}']);
  126.         $action3 = new TDataGridAction([$this'onDelete'], ['id'=>'{id}''register_state' => 'false']);
  127.         
  128.         $this->datagrid->addAction($action1_t('View'),   'fa:search gray');
  129.         $this->datagrid->addAction($action2_t('Edit'),   'far:edit blue');
  130.         $this->datagrid->addAction($action3 ,_t('Delete'), 'far:trash-alt red');
  131.         
  132.         // create the datagrid model
  133.         $this->datagrid->createModel();
  134.         
  135.         // creates the page navigation
  136.         $this->pageNavigation = new TPageNavigation;
  137.         $this->pageNavigation->setAction(new TAction([$this'onReload']));
  138.         
  139.         $panel = new TPanelGroup('''white');
  140.         $panel->add($this->datagrid);
  141.         $panel->addFooter($this->pageNavigation);
  142.         
  143.         // header actions
  144.         $dropdown = new TDropDown(_t('Export'), 'fa:list');
  145.         $dropdown->setPullSide('right');
  146.         $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
  147.         $dropdown->addAction_t('Save as CSV'), new TAction([$this'onExportCSV'], ['register_state' => 'false''static'=>'1']), 'fa:table blue' );
  148.         $dropdown->addAction_t('Save as PDF'), new TAction([$this'onExportPDF'], ['register_state' => 'false''static'=>'1']), 'far:file-pdf red' );
  149.         $panel->addHeaderWidget$dropdown );
  150.         
  151.         // vertical box container
  152.         $container = new TVBox;
  153.         $container->style 'width: 100%';
  154.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  155.         $container->add($this->form);
  156.         $container->add($panel);
  157.         
  158.         parent::add($container);
  159.     }
  160. }
  161. ?>


O problema está quando chamo o grid e o nome da cidade nao vem. a mensagem: "Tentativa de uma propriedade não existente(cidade->nome)".
Creio que ao tentar coletar o id da cidade com o comando parent::addAttribute('cidade'), ele não está sendo coletado.

Alguem poderia me dar uma ajuda quanto a isso?

desde já agradeço.

William

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)


TB

Você fez a referência com associação na Model?
precisa ter um set e get para cidade, que está em outra tabela.

um exemplo que tenho aqui..

na model
private $turmas; // propriedade de classe


métodos get e set
public function set_turmas(Turmas $object)
{
$this->turmas = $object;
$this->turmas_id = $object->id;
}

public function get_turmas()
{
// loads the associated object
if (empty($this->turmas))
$this->turmas = new Turmas($this->turmas_id);

// returns the associated object
return $this->turmas;
}

tb sou novato, espero que ajude.


WS

Tales Bogoni, um bom dia!

isso já fiz... o que está estranho é que se no metodo get que está abaixo eu coloco o id da cidade tipo 4375, será exibido normalmente. Mas se eu faço como está abaixo, mesmo fazendo o ( parent::addAttribute('cidade'); ) não funciona.
Se tivesse jeito de visualizar o que está sendo recebido no constructor, de repente seria legal...

  1. <?php
  2.     public function get_cidade()
  3.     {
  4.        return Cidade::find($this->cidade); 
  5.     } 
  6. ?>


ainda não resolvi.. caso alguem saiba o que possa ser, me ajudaria bastante!

Obrigado.
LG

vamos lá, veja só.. você tem uma propriedade no model chamada 'cidade' adicionada por meio de
  1. <?php
  2.  parent::addAttribute('cidade');
  3. ?>

e criou um relacionamento para obter o objeto cidade por meio dessa propriedade:
  1. <?php
  2.     public function get_cidade()
  3.     {
  4.        return Cidade::find($this->cidade); 
  5.     } 
  6. ?>

o problema é que está com o mesmo nome, pois dessa gera uma grande confusão, o ideal é quando trabalhar com chaves enstrangeiras, no proprio banco já seguir o modelo nome_propriedade_id, assim na tabela cliente deveria ser "cidade_id",

se não for possível mudar no banco, mude o nome do metodo get_cidade para ficar diferente. e ajuste na data grid
WS

Leandro Gama, eu pensei nisso tambem.. o problema é que estou fazendo uma pequena integração entre sistemas e não consigo mudar no banco mesmo...
vou tentar fazer o que me sujeriu e retorno com resultado...
obrigado!
WS

Bom dia Leandro Gama,
fiquei de dar retorno sobre o resultado. Era isso mesmo, muito obrigado!