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. * Constructor method
  13. */
  14. public function __construct($id = NULL)
  15. {
  16. parent::__construct($id);
  17. parent::addAttribute('codigo');
  18. parent::addAttribute('nome');
  19. parent::addAttribute('cnpj');
  20. }
  21. }
  22. ?>


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. $repository = new TRepository('pessoa');
  16. $pessoas = $repository->load($criteria);
  17. foreach ($pessoas as $pessoa)
  18. {
  19. echo $pessoa->nome . ' - ' . $pessoa->cnpj . '<br>';
  20. }
  21. TTransaction::close(); // close transaction
  22. }
  23. catch (Exception $e)
  24. {
  25. new TMessage('error', $e->getMessage());
  26. }
  27. }
  28. }
  29. ?>


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';