由于历史原因,所有模型都从 Zend_Db_Table 扩展而来。现在,我需要使用事务。如何?
我做了一些谷歌搜索,一些人说以下方式可以提供帮助:
1:$tableA->getAdapter()->beginTransaction(); 2:$tableA->getAdapter()->getDriver()->getConnection()->beginTransaction();
有没有更好的解决方案?
由于历史原因,所有模型都从 Zend_Db_Table 扩展而来。现在,我需要使用事务。如何?
我做了一些谷歌搜索,一些人说以下方式可以提供帮助:
1:$tableA->getAdapter()->beginTransaction(); 2:$tableA->getAdapter()->getDriver()->getConnection()->beginTransaction();
有没有更好的解决方案?
我通过将以下代码添加到 zend_db_table 中解决了这个问题: /** * surport transaction */
public function beginTransaction() {
$this->getAdapter()->beginTransaction();
}
public function commit() {
$this->getAdapter()->commit();
}
public function rollback() {
$this->getAdapter()->rollback();
}
这样我就可以在从 zend_db_table 扩展的模型中使用事务,如下所示:
public function test(){
$this->beginTransaction();
try {
$this->addCourseItem('1', '1', '1', '1', '1');
$this->fetchRow("none-exist-field = 1");
//the following code will not execute
echo "okay";
$this->commit();
} catch (exception $e) {
$this->rollback();
echo "error message:".$e->getMessage();
}
}