gremio10 14 Denunciar post Postado Dezembro 6, 2011 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 2 Denunciar post Postado Dezembro 7, 2011 Ta tudo ai! :D http://framework.zend.com/manual/en/zend.db.adapter.html Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Dezembro 7, 2011 @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
Prog 183 Denunciar post Postado Dezembro 7, 2011 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
gremio10 14 Denunciar post Postado Dezembro 7, 2011 Sim, só que eu estou começando a utilizar eles apenas aonde há movimento de valores de pagamento, ou algo do tipo. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 7, 2011 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
Tiare Balbi Bonamini 2 Denunciar post Postado Dezembro 7, 2011 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
gremio10 14 Denunciar post Postado Dezembro 7, 2011 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
Prog 183 Denunciar post Postado Dezembro 7, 2011 Esta classe é muito genérica, você deve utilizar transações em classes de negócio mais específicas. Compartilhar este post Link para o post Compartilhar em outros sites
Tiare Balbi Bonamini 2 Denunciar post Postado Dezembro 7, 2011 DataMapper da uma procura sobre, qualquer coisa se nao achar algo até final da tarde eu mando um exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Dezembro 7, 2011 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
Tiare Balbi Bonamini 2 Denunciar post Postado Dezembro 7, 2011 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
Leozitho 81 Denunciar post Postado Dezembro 8, 2011 No próprio Quick Start do Zend Framework tem um exemplo de como implementar o pattern Data Mapper nele. 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