Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gremio10

Utilizando o beginTransiction()

Recommended Posts

Fala galera, eu estava conversando com um amigo, e ele me falou sobre o Controlling Database Transactions do Zend, só que não sei para que serve, e também aonde posso utiliza-lo, posso usar em uma controller ?

 

minhas models possuem funções próprias, mas funções gerais, como insert, update, delete...

 

Como faria para usar nelas, se na hora da inserção de algum dado, eu vou na controller, instancio minha model, e na variável eu dou um ->insert/update/delete ?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Tiare Balbi Bonamini Obrigado pela resposta, mas foi ai que eu cai quando pesquisei no Google :natallaugh: ...

 

Eu apenas gostaria de saber como posso fazer para poder utilizar o beginTransiction, o commit e o rollBack na controller, pois na model, eu tenho funções apenas para fazer os inserts, updates e deletes...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma transação apenas faz sentido no caso de haverem comandos vinculados, vários inserts, deletes, updates e/ou vários deles, onde o mal resultado de um comando pode afetar o funcionamento dos demais e causar um problema de integridade dos dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu apenas gostaria de saber como posso fazer para poder utilizar o beginTransiction, o commit e o rollBack na controller

Tá errado isto. O controle da transação deve ser feito no model e não no controller.

 

...pois na model, eu tenho funções apenas para fazer os inserts, updates e deletes...

Toda a lógica do negócio deve estar no model.

 

Como foi dito, o controle de transação deve ser feito quando você precisa fazer modificação em mais de uma tabela, permitindo que, caso ocorra algum erro em alguma das modificações, você possa retornar ao estado anterior de todas as tabelas.

 

Para te ajudar, o ideal é você postar um exemplo do que você está tentando fazer, que fica mais fácil de explicar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o pessoal acima já deu uma ajuda :D

 

Quero só colocar uma observação:

- Regra de negócio não deve ficar no controlador

- O seu controller quanto mais burro for melhor!

- Dentro do seu model você tem capacidade de fazer qualquer ação necessária

 

Exemplo do que você esta querendo fazer


$db = $table->getAdapter();

$db->beginTransaction();

try {
// Consultas desejadas
$db->query(...);
$db->query(...);
$db->query(...);

// Caso tudo OK!
// envia
$db->commit();

} catch (Zend_Db_Adapter_Exception $e) {
// Caso tenha erro ele gera o rollback!
$db->rollBack();
echo $e->getMessage();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa é minha model de funções insert/update e delete:

 

public function insert( Array $_data )
   {
       try
       {
           return parent::insert( $this->tableColumms( $_data ) );
       }
       catch( Zend_Db_Exception $e )
       {
           print( $e->getMessage() );
       }
   }

   /**
    * Método para editar dados do banco de dados
    * 
    * @param array $_data array dos dados a serem editados
    * @param type $_id pode ser array, se for, determinar na chave qual o campo, 
    * junto com o ? e no valor, o valor para a edição, ex: array( "meu_id = ?" => 3 );
    * @return type 
    */
   public function update( Array $_data, $_id )
   {
       try
       {
           if( is_array( $_id ) )
           {
               foreach( $_id as $_key => $_val )
               {
                   $_key = $_key . " = ?";
                   $_where = $this->getAdapter()->quoteInto( $_key, $_val );
               }
           }
           else
           {
               $_where = $this->getAdapter()->quoteInto( "id = ?", $_id );
           }

           return parent::update( $this->tableColumms( $_data ), $_where );
       }
       catch( Zend_Db_Exception $e )
       {
           print( $e->getMessage() );
       }
   }

   public function delete( $_id )
   {
       try
       {
           if( is_array( $_id ) )
           {
               foreach( $_id as $_key => $_val )
               {
                   $_key = $_key . " = ?";
                   $_where = $this->getAdapter()->quoteInto( $_key, $_val );
               }
           }
           else
           {
               $_where = $this->getAdapter()->quoteInto( "id = ?", $_id );
           }

           return parent::delete( $_where );
       }
       catch( Zend_Db_Exception $e )
       {

       }
   }

   /**
    * Método para verificar se as colunas vindas para a inserção
    * na tabela existem, se não existir
    * ele não lista
    * 
    * @param array $_data dados a serem verificados
    * @return array 
    */
   private function tableColumms( Array $_data )
   {
       $_cols = array();

       foreach( $_data as $_columns => $_value )
       {   
           if( in_array( $_columns, $this->_getCols() ) )
           {
               $_cols[ $_columns ] = $_value;
           }
       }

       return $_cols;
   }

 

não sei aonde eu poderia fazer para poder colocar o beginTransiction(); commit(); e o rollBack();

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
Esta classe é muito genérica

São funções que uso para todas as minhas inserções/updates e deletes... funcionam bem, mas não saberia aonde implementar o Controlling Database Transactions nelas.

 

DataMapper da uma procura sobre

DataMapper contruido em Ruby ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

DataMapper é um pattern utilizados por diversas linguagens! De uma olhada nos links.

 

http://blog.fedecarg.com/2009/09/19/zend-framework-dal-daos-and-datamappers/

 

 

 

 

 

http://uimbibe.com/video/R4M6H96589HX/zf-20-DataMapper-with-Zend-Framework-reading

Compartilhar este post


Link para o post
Compartilhar em outros sites

No próprio Quick Start do Zend Framework tem um exemplo de como implementar o pattern Data Mapper nele. natal_smile.gif

 

Se quiser dá uma olhada :seta: http://framework.zend.com/manual/en/learning.quickstart.create-model.html

 

No exemplo a classe Application_Model_GuestbookMapper faz o papel do Data Mapper.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.