Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Trabalhando com Generators do Firbird. Quero primeira mente agradece ao Pablo por disponibilizar o Acesso ao Firebird. Vou aqui colocar alguma alterações que já tinha trabalhado e aplicado junto a minha aplicação. Bem vamos lá, alem da conexão com bando Firebird tive um grande necessidade de usar generators para as minhas tabelas em vez de MAX/Serial sendo assim implementei por conta própria umas pequenas alterações no...
RR
Trabalhando com Generators do Firbird.  
Quero primeira mente agradece ao Pablo por disponibilizar o Acesso ao Firebird.

Vou aqui colocar alguma alterações que já tinha trabalhado e aplicado junto a minha aplicação.

Bem vamos lá, alem da conexão com bando Firebird tive um grande necessidade de usar generators para as minhas tabelas em vez de MAX/Serial
sendo assim implementei por conta própria umas pequenas alterações no framework.

Segue elas:

Na Classe Trecord.php foi implementado o seguinte codigo:

public function getNameGenerator() { // get the Active Record class name $class = get_class($this); // returns the PRIMARY KEY Active Record class constant return constant("{$class}::GENERATOR"); } /** * Returns the LAST Object ID from database * @return An Integer containing the LAST Object ID from database * @exception Exception if there's no active transaction opened */ public function getGenerator() { $pk = $this->getPrimaryKey(); // get the connection of the active transaction if ($conn = TTransaction::get()) { // instancia instrução de SELECT $sql='select gen_id('.$this->getNameGenerator().',1) from rdb$database'; $result= $conn->Query($sql); // retorna os dados do banco $row = $result->fetch(); return $row[0]; } else { // if there's no active transaction opened throw new Exception(AdiantiCoreTranslator::translate('No active transactions') . ': ' . __METHOD__ .' '. $this->getEntity()); } }


E dentro do Methodo store da Classe TRecord acrecentei o seguinte código logo após o IDPOLICY=='serial'

if ((defined("{$class}::IDPOLICY")) AND (constant("{$class}::IDPOLICY") == 'serial')) { unset($this->$pk); } else if ((defined("{$class}::IDPOLICY")) AND (constant("{$class}::IDPOLICY") == 'generator')) { $this->$pk = $this->getGenerator(); } else { $this->$pk = $this->getLastID() +1; }


Na classe a onde fazemos a chamada da tabela que referencia ao banco segue algumas alterações


Exemplo do meu arquivo: Tab_Armacao.class.php
  1. <?php
  2. class Tab_Armacao extends \Adianti\Database\TRecord {
  3.     const TABLENAME 'ARMACAO';
  4.     const PRIMARYKEY 'ID_ARMACAO';  // nome do campo primary key lembrando que a nomenclatura deve obedecer ao do banco:
  5.     // se for maiusculo  "ID"        se for minusculo    "id"
  6.     
  7.     //Observação importante no caso do banco Firebird Utilizamos Geralmene Generators para Criar a sequencia do Primary key
  8.     //Nesta situação implementei junto ao IDPOLICY a opção do "generetor" como podem ver abaixo.
  9.     //Feito isto precisei especificar o nome do generator no banco que neste caso é ID_ARMACAO mas poderia ser SEQ_ARMACAO
  10.     
  11.     //Outra observação referente ao banco Firebird é que todos os campos são retornados em Maiusculo e não minusculo
  12.     //sabendo disso fique atento ao recuperar dados no banco.
  13.     
  14.     const IDPOLICY 'generator'// Max/Serial/generator
  15.     const GENERATOR 'ID_ARMACAO'
  16.     
  17. }
  18. Espero ter ajudado aqueles que necessitam trabalhar com generatorque saber passa ser também uma uma implementação do Framework.
  19. Obrigados a todos e boa sorte.
  20. Segue também anexo o arquivo TRecord.php alterado.

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