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:
Cliente List:
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
            
            
        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:
 - <?php
 - class Cliente extends TRecord
 - {
 -     const TABLENAME  = 'cliente';
 -     const PRIMARYKEY = 'id';
 -     const IDPOLICY   =  'max'; // {max, serial}
 -     
 -     const CREATEDAT = 'created_at';
 -     const UPDATEDAT = 'updated_at';
 -     
 -     /**
 -      * Constructor method
 -      */
 -     public function __construct($id = NULL, $callObjectLoad = TRUE)
 -     {
 -         //aba cliente
 -         parent::__construct($id, $callObjectLoad);
 -         parent::addAttribute('razao');
 -         parent::addAttribute('fantasia');
 -         parent::addAttribute('tipo_pessoa');        
 -         parent::addAttribute('cnpj_cpf');
 -         parent::addAttribute('ie_identidade');
 -         parent::addAttribute('inscricao_municipal');
 -         parent::addAttribute('contribuinte_icms');
 -         parent::addAttribute('data_nascimento');
 -         parent::addAttribute('ativo');
 -         parent::addAttribute('filial_id');
 -         parent::addAttribute('sexo');
 -         parent::addAttribute('grau_satisfacao');
 -         parent::addAttribute('data_cadastro');
 -         
 -         //aba endereço          
 -         //parent::addAttribute('*condominio*');
 -         //parent::addAttribute('*CEP*');
 -         parent::addAttribute('endereco');
 -         parent::addAttribute('numero');
 -         parent::addAttribute('complemento');
 -         //parent::addAttribute('*pais*'); 
 -         parent::addAttribute('cidade');
 -         parent::addAttribute('uf');
 -         parent::addAttribute('cond_pagamento');
 -         parent::addAttribute('bairro');
 -     
 -         //aba contato
 -         //parent::addAttribute('*Telefone Residencial*');
 -         parent::addAttribute('telefone_comercial');
 -         parent::addAttribute('telefone_celular');
 -         //parent::addAttribute('*Telefone Celular 2*');
 -         parent::addAttribute('email');
 -         parent::addAttribute('contato');
 -         parent::addAttribute('hotsite_email');
 -         parent::addAttribute('hotsite_acesso');
 -         
 -         //aba CRM        
 -         parent::addAttribute('crm');
 -         parent::addAttribute('id_canal_venda');
 -         parent::addAttribute('id_concorrente');
 -         parent::addAttribute('responsavel');
 -         parent::addAttribute('status_prospeccao');
 -         parent::addAttribute('participa_pre_cobranca');
 -         parent::addAttribute('cob_envia_email');
 -         parent::addAttribute('cob_envia_sms'); 
 -         //aba outros    
 -         parent::addAttribute('id_conta');
 -         parent::addAttribute('id_vendedor');      
 -    
 -     }
 -     
 -     public function get_cidade()
 -     {
 -        return Cidade::find($this->cidade); 
 -        //$this->cidade = new Cidade( $this->cidade );       
 -        //return $this->cidade;        
 -     }
 -     
 -     public function get_uf()
 -     {
 -         return Estado::find($this->uf);
 -     }
 -     
 -     public function get_grupo()
 -     {
 -         return Grupo::find($this->grupo_id);
 -     }
 -     
 -     public function delete($id = null)
 -     {
 -         $id = isset($id) ? $id : $this->id;
 -         
 -         PessoaPapel::where('pessoa_id', '=', $this->id)->delete();
 -         parent::delete($id);
 -     }
 - }
 - ?>
 
 Cliente List:
 - <?php
 - /**
 -  * ClienteList
 - class ClienteList extends TPage
 - {
 -     protected $form;     // registration form
 -     protected $datagrid; // listing
 -     protected $pageNavigation;
 -     protected $formgrid;
 -     protected $deleteButton;
 -     
 -     use Adianti\base\AdiantiStandardListTrait;
 -     
 -     /**
 -      * Page constructor
 -      */
 -     public function __construct()
 -     {
 -         parent::__construct();
 -         
 -         $this->setDatabase('IXC_teste');            // defines the database
 -         $this->setActiveRecord('Cliente');   // defines the active record
 -         $this->setDefaultOrder('id', 'asc');         // defines the default order
 -         $this->setLimit(10);
 -         // $this->setCriteria($criteria) // define a standard filter
 -         $this->addFilterField('id', '=', 'id'); // filterField, operator, formField
 -         $this->addFilterField('razao', 'like', 'cliente'); // filterField, operator, formField
 -         $this->addFilterField('fantasia', 'like', 'cliente'); // filterField, operator, formField
 -         $this->addFilterField('fone', 'like', 'fone'); // filterField, operator, formField
 -         $this->addFilterField('endereco', 'like', 'logradouro'); // filterField, operator, formField
 -         $this->addFilterField('numero', '=', 'numero'); // filterField, operator, formField
 -         $this->addFilterField('bairro', '=', 'bairro'); // filterField, operator, formField
 -         $this->addFilterField('cidade', '=', 'cidade'); // filterField, operator, formField
 -         $this->addFilterField('uf', '=', 'estado'); // filterField, operator, formField
 -         $this->addFilterField('status_acesso', '=', 'status'); // filterField, operator, formField
 -         
 -         // creates the form
 -         $this->form = new BootstrapFormBuilder('form_search_Cliente');
 -         $this->form->setFormTitle('Cliente');
 -         
 -         // create the form fields
 -         $id = new TEntry('id');
 -         $cliente = new TEntry('razao_social');
 -         $fone = new TEntry('fone');
 -         $logradouro = new TEntry('endereco');
 -         $numero = new TEntry('numero');
 -         $bairro = new TEntry('bairro');
 -         $cidade = new TEntry('cidade');
 -         $uf = new TEntry('uf');
 -         $status = new TEntry('status_internet');
 -           
 -         //$grupo_id = new TDBUniqueSearch('grupo_id', 'IXC_teste', 'Grupo', 'id', 'nome');
 -         //$grupo_id->setMinLength(0);
 -         // add the fields
 -         $this->form->addFields( [ new TLabel('Id') ], [ $id ] );
 -         $this->form->addFields( [ new TLabel('Cliente') ], [ $cliente ] );
 -         $this->form->addFields( [ new TLabel('Fone') ], [ $fone ] );
 -         $this->form->addFields( [ new TLabel('Logradouro') ], [ $logradouro ] );
 -         $this->form->addFields( [ new TLabel('Número') ], [ $numero ] );
 -         $this->form->addFields( [ new TLabel('Bairro') ], [ $bairro ] );
 -         $this->form->addFields( [ new TLabel('Cidade') ], [ $cidade ] );
 -         $this->form->addFields( [ new TLabel('Estado') ], [ $uf ] );
 -         $this->form->addFields( [ new TLabel('Status Internet') ], [ $status ] );
 -         // set sizes
 -         $id->setSize('100%');
 -         $cliente->setSize('100%');
 -         $fone->setSize('100%');
 -         $logradouro->setSize('100%');
 -         $numero->setSize('100%');
 -         $bairro->setSize('100%');
 -         $cidade->setSize('100%');
 -         $uf->setSize('100%');
 -         $status->setSize('100%');
 -       
 -         
 -         // keep the form filled during navigation with session data
 -         $this->form->setData( TSession::getValue(__CLASS__.'_filter_data') );
 -         
 -         // add the search form actions
 -         $btn = $this->form->addAction(_t('Find'), new TAction([$this, 'onSearch']), 'fa:search');
 -         $btn->class = 'btn btn-sm btn-primary';
 -         $this->form->addActionLink(_t('New'), new TAction(['ClienteForm', 'onEdit']), 'fa:plus green');
 -         
 -         // creates a Datagrid
 -         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
 -         $this->datagrid->style = 'width: 100%';
 -         //$this->datagrid->datatable = 'true';
 -         // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
 -         
 -         // creates the datagrid columns
 -         $column_id = new TDataGridColumn('id', 'Id', 'left');
 -         $column_cliente = new TDataGridColumn('razao', 'Cliente', 'left');
 -         $column_fone = new TDataGridColumn('fone', 'Fone', 'left');
 -         $column_logradouro = new TDataGridColumn('endereco', 'Logradouro', 'left');
 -         $column_numero = new TDataGridColumn('numero', 'Número', 'left');
 -         $column_bairro = new TDataGridColumn('bairro', 'Bairro', 'left');
 -         $column_cidade = new TDataGridColumn('cidade->nome', 'Cidade', 'left'); 
 -         $column_uf = new TDataGridColumn('uf->nome', 'Estado', 'left');
 -         $column_status = new TDataGridColumn('status', 'Status', 'left');
 -         
 -         //$column_grupo_id = new TDataGridColumn('status_internet->nome', 'Status', 'left');
 -         
 -         
 -         //$column_grupo_id = new TDataGridColumn('grupo->nome', 'Grupo', 'left');
 -         
 -         $column_fone->enableAutoHide(500);
 -        // $column_email->enableAutoHide(500);
 -        // $column_grupo_id->enableAutoHide(500);
 -         
 -         // add the columns to the DataGrid
 -         $this->datagrid->addColumn($column_id);
 -         $this->datagrid->addColumn($column_cliente);
 -         $this->datagrid->addColumn($column_fone);
 -         $this->datagrid->addColumn($column_logradouro);
 -         $this->datagrid->addColumn($column_numero);
 -         $this->datagrid->addColumn($column_bairro);
 -         $this->datagrid->addColumn($column_cidade);
 -         $this->datagrid->addColumn($column_uf);
 -         $this->datagrid->addColumn($column_status);
 -         
 -         $column_id->setAction(new TAction([$this, 'onReload']), ['order' => 'id']);
 -         $column_cliente->setAction(new TAction([$this, 'onReload']), ['order' => 'cliente']);
 -         
 -         $action1 = new TDataGridAction(['ClienteFormView', 'onEdit'], ['id'=>'{id}', 'register_state' => 'false']);
 -         $action2 = new TDataGridAction(['ClienteForm', 'onEdit'], ['id'=>'{id}']);
 -         $action3 = new TDataGridAction([$this, 'onDelete'], ['id'=>'{id}', 'register_state' => 'false']);
 -         
 -         $this->datagrid->addAction($action1, _t('View'),   'fa:search gray');
 -         $this->datagrid->addAction($action2, _t('Edit'),   'far:edit blue');
 -         $this->datagrid->addAction($action3 ,_t('Delete'), 'far:trash-alt red');
 -         
 -         // create the datagrid model
 -         $this->datagrid->createModel();
 -         
 -         // creates the page navigation
 -         $this->pageNavigation = new TPageNavigation;
 -         $this->pageNavigation->setAction(new TAction([$this, 'onReload']));
 -         
 -         $panel = new TPanelGroup('', 'white');
 -         $panel->add($this->datagrid);
 -         $panel->addFooter($this->pageNavigation);
 -         
 -         // header actions
 -         $dropdown = new TDropDown(_t('Export'), 'fa:list');
 -         $dropdown->setPullSide('right');
 -         $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
 -         $dropdown->addAction( _t('Save as CSV'), new TAction([$this, 'onExportCSV'], ['register_state' => 'false', 'static'=>'1']), 'fa:table blue' );
 -         $dropdown->addAction( _t('Save as PDF'), new TAction([$this, 'onExportPDF'], ['register_state' => 'false', 'static'=>'1']), 'far:file-pdf red' );
 -         $panel->addHeaderWidget( $dropdown );
 -         
 -         // vertical box container
 -         $container = new TVBox;
 -         $container->style = 'width: 100%';
 -         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
 -         $container->add($this->form);
 -         $container->add($panel);
 -         
 -         parent::add($container);
 -     }
 - }
 - ?>
 
 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
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.
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...
ainda não resolvi.. caso alguem saiba o que possa ser, me ajudaria bastante!
Obrigado.
vamos lá, veja só.. você tem uma propriedade no model chamada 'cidade' adicionada por meio de
e criou um relacionamento para obter o objeto cidade por meio dessa propriedade:
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
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!
Bom dia Leandro Gama,
fiquei de dar retorno sobre o resultado. Era isso mesmo, muito obrigado!