的ZF1 Zend_Db的参考手册具有整个部分上执行交易。
该ZF2的Zend \ Db的参考手册,缺乏对交易的任何文件。
如何在ZF2进行交易? 示例代码将是有益的。
的ZF1 Zend_Db的参考手册具有整个部分上执行交易。
该ZF2的Zend \ Db的参考手册,缺乏对交易的任何文件。
如何在ZF2进行交易? 示例代码将是有益的。
丢失的文件是好奇。
要了解发生了什么,我不得不潜入API文档的Zend的\ DB \适配器。
它看起来像beginTransaction
, rollback
和commit
定义在Zend的\ DB \适配器\驱动程序\ ConnectionInterface 。 这意味着,他们是每一个适配器连接上调用方法。 不幸的是,连接本身是相当埋葬。
我没有什么明确的 - 而在这个时候不能提供一个例子 - 是搞清楚哪个对象实际调用这些方法。 在最坏的情况下,它看起来像你可能想为$adapter->getDriver()->getConnection()->beginTransaction()
好恶。
我希望别人更多的知识,ZF2方便的拷贝,会看到这一点,并提供了一个更好的选择。
不要忘了,你可以出具BEGIN TRANSACTION
/ ROLLBACK
/ COMMIT
/ SET autocommit=...
SQL语句自己。 这可能是正常的,因为它看起来并不像Zend的\ Db的跟踪交易状态。
你明白了。 正确的方法开始,提交和回滚事务如下:
$this->getAdapter()->getDriver()->getConnection()->beginTransaction();
$this->getAdapter()->getDriver()->getConnection()->commit();
$this->getAdapter()->getDriver()->getConnection()->rollback();
只要把这个在那里过你也可以通过创建的最后一个ID:
$this->getAdapter()->getDriver()->getConnection()->getLastGeneratedValue()
如果你正在使用pgSQL里,你将需要添加到返回最后创建的ID序列:
$this->getAdapter()->getDriver()->getConnection()->getLastGeneratedValue('mail_mailid_seq')
有两种事情做交易。
1 - 的MyISAM是不是一个交易引擎,所以更改表引擎InnoDB的。
2 -交易查询( "START TRANSACTION;"
OR "ROLLBACK;"
)连接必须是相同的与其他查询(插入或更新)。
对于ZF2这样做,你应该得到当前数据库适配器和所有查询中使用它。
此代码将无法正常工作 :
$this->getAdapter()->getDriver()->getConnection()->beginTransaction();
//do some jobs - e.g : multiple tables update or insert.
$this->getAdapter()->getDriver()->getConnection()->rollback();
由于$this->getAdapter()->getDriver()->getConnection()
创建新的数据库连接。
使用下面的代码来代替:
$connection = $this->getAdapter()->getDriver()->getConnection();
$connection->beginTransaction();
//do some jobs - e.g : multiple tables update or insert.
$connection->rollback();
对于检查,如果你的连接是正确的,只是启用查询日志在MySQL。
运行的查询后,你会看到连接数之前在MySQL log.Those每个查询必须在所有事务查询相同。