Buscar dado no banco antes de salvar Pessoal, para calcular um saldo, antes de salvar um dado, preciso ir ao banco e pegar a leitura anterior. Estou tentando utilizar no onSave, mas não esta atribuindo o valor ao campo. Meu código: public function onSave( $param ) { try { TTransaction::open('abastecimento'); // open a transaction /** // Enable Debug logg...
CS
Buscar dado no banco antes de salvar  
Pessoal, para calcular um saldo, antes de salvar um dado, preciso ir ao banco e pegar a leitura anterior. Estou tentando utilizar no onSave, mas não esta atribuindo o valor ao campo. Meu código:

public function onSave( $param )
{
try
{
TTransaction::open('abastecimento'); // open a transaction

/**
// Enable Debug logger for SQL operations inside the transaction
TTransaction::setLogger(new TLoggerSTD); // standard output
TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
**/

$this->form->validate(); // validate form data

$object = new OprLeitura; // create an empty object
$data = $this->form->getData(); // get form data as array
$object->fromArray( (array) $data); // load the object with data


$conn = TTransaction::get();
$ant = $conn->query("select max(leitura) from leitura where id_cad =".$object->id_cad);

$item_ant = new StdClass;

foreach ($ant as $row)
{
$item_ant->leitura = $row['leitura'];
}


$data->leitura_ant = $item_ant->leitura;
$this->form->setData( $data );



$object->store(); // save the object

// get the generated id
$data->id = $object->id;

$this->form->setData($data); // fill form data
TTransaction::close(); // close the transaction

new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e) // in case of exception
{
new TMessage('error', $e->getMessage()); // shows the exception error message
$this->form->setData( $this->form->getData() ); // keep form data
TTransaction::rollback(); // undo all pending operations
}
}

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)


MG

Quando você obtém os dados do formulário ($data = $this->form->getData()), o cad_id já existe?
CS

Opa, existe sim, amigo. É que preciso para fazer um calculo de saldo, aí preciso pegar a leitura anterior do cliente. Resolvi assim:
 
  1. <?php
  2. // Recupera leitura anterior
  3. $conn = TTransaction::get();
  4. $ant = $conn->query('select max(leitura) from leitura where id_cad ='.$object->id_cad);
  5. foreach ($ant as $row)
  6. {
  7. $lant = $row[0];
  8. }
  9. $object->leitura_ant = ($lant > 0) ? $lant : 0;
  10. ?>
MG

Ok,

Pra você obter a leitura por um "nome", você precisaria utilizar "alias", por exemplo: $ant = $conn->query('select max(leitura) as leitura from leitura where id_cad ='.$object->id_cad);