Lançado Adianti Framework 8.1!
Clique aqui para saber mais
TRecord retorna os campos em branco Bom dia, prezados. Estou iniciando no adianti e, após ler o livro de capa a capa, criei uma classe pessoa, descendente de TRecord. No banco de dados a tabela pessoa tem muito mais campos. Porém, para não dificultar o aprendizado, apenas explicitei conforme abaixo, dando o nome do arquivo de Pessoa.class.php. Essa classe tem a primary key denominada id e também tem um campo chamado codigo: ...
GJ
TRecord retorna os campos em branco  
Bom dia, prezados.
Estou iniciando no adianti e, após ler o livro de capa a capa, criei uma classe pessoa, descendente de TRecord.
No banco de dados a tabela pessoa tem muito mais campos. Porém, para não dificultar o aprendizado, apenas explicitei conforme abaixo, dando o nome do arquivo de Pessoa.class.php. Essa classe tem a primary key denominada id e também tem um campo chamado codigo:

  1. <?php
  2. /**
  3.  * Pessoa Active Record
  4.  * @author  Geazi
  5.  */
  6. class Pessoa extends TRecord
  7. {
  8.     const TABLENAME 'pessoa';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'max'// {max, serial}
  11.     
  12.     
  13.     /**
  14.      * Constructor method
  15.      */
  16.     public function __construct($id NULL)
  17.     {
  18.         parent::__construct($id);
  19.         parent::addAttribute('codigo');
  20.         parent::addAttribute('nome');
  21.         parent::addAttribute('cnpj');
  22.     }
  23. }
  24. ?>


Criei uma classe controladora, descendente de TPage, registrei no sistema, dei permissão ao grupo, acrescentei no menu. Tudo certinho.
Ao chamar a classe, aparece o form exatamente como previsto. Porém, todos os registros vem com seus campos em branco.
Se eu chamo o count, vem a quantidade correta de registros com o filtro especificado. Nesse caso, os nomes que começam com Antônio.

  1. <?php
  2. class ExecuteManualConnection extends TPage
  3. {
  4.     public function __construct()
  5.     {
  6.         parent::__construct();
  7.         try
  8.         {
  9.             TTransaction::open('sinergia'); // abre uma transação 
  10.             TTransaction::setLogger(new TLoggerHTML('tmp/log_sinergia.html'));
  11.             $criteria = new TCriteria;
  12.             $criteria->add(new TFilter('nome''like''ANTONIO%'));
  13.             $criteria->setProperty('limit'30);
  14.             $criteria->setProperty('order''codigo');
  15.             
  16.             $repository = new TRepository('pessoa');
  17.             $pessoas $repository->load($criteria);
  18.             
  19.             foreach ($pessoas as $pessoa
  20.             { 
  21.                 echo $pessoa->nome ' - ' $pessoa->cnpj '<br>'
  22.             }
  23.             
  24.             TTransaction::close(); // close transaction
  25.         }
  26.         catch (Exception $e)
  27.         {
  28.             new TMessage('error'$e->getMessage());
  29.         }
  30.     }
  31. }
  32. ?>


Estou quebrando a cabeça há 3 dias.
Uso o SQL Server num ambiente windows com apache e PHP 7.0.13

Em tempo: se eu fizer uma consulta direta, do tipo listado abaixo, funciona normal. Ou seja, o que estou fazendo de errado na classe Pessoa?

  1. <?php
  2. TTransaction::open('sinergia');
  3. $conn TTransaction::get();
  4. $result $conn->query('SELECT ID, CODIGO, NOME, CNPJ FROM PESSOA' );
  5. foreach ($result as $pessoa)
  6. {
  7.    print $pessoa['id'] . ' - ' $pessoa['codigo'] . ' - ' .$pessoa['nome'] . "<br>\n";
  8. }
  9. TTransaction::close;
  10. catch (Exception $e)
  11. {
  12.    new TMessage('Erro:'$e->getMessage());
  13. }
  14. ?>


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


NR

Se o nome das colunas está em maiúsculo no banco, faça o teste declarando em maiúsculo no model e no control também.
AM

Eu tive um problema semelhante há algum tempo. No meu caso resolveu escrevendo o parâmetro "LIKE" em maiúsculas.
Isso aconteceu na versão anterior do framework utilizando MySQL, não sei se foi resolvido na versão atual.
GJ

Nataniel, muito obrigado. Você matou a charada.
Mudei a declaração no model e no controle. Resolveu em parte. O campo codigo apareceu mas o campo nome continuava sem aparecer.
Inverti, fiz vários testes, com maiusculas, com minúsculas, e nada. As vezes um campo aparecia e outro não. Nunca todos de uma vez.
Então, resolvi radicalizar:
Mudei todos os nomes de campos da tabela pessoa no banco de dados, para minúsculas e as declarações para minúsculas.
E... voilà... funcionou.
Obrigado por ter dado uma idéia diferente para o problema, mostrando a luz no fim do túnel.
Para quem tiver um problema parecido e quiser saber como fiz no sql server, aqui vai:
EXEC SP_RENAME 'Pessoa.[ID]','id','Column'; EXEC SP_RENAME 'Pessoa.[CODIGO]','codigo','Column'; EXEC SP_RENAME 'Pessoa.[NOME]','nome','Column'; EXEC SP_RENAME 'Pessoa.[CNPJ]','cnpj','Column'; EXEC SP_RENAME 'Pessoa.[NOME_FANTASIA]','nome_fantasia','Column';