首先,让我先说一下。我的问题与这个类似:Cannot rollback transaction in Zend Framework
我的表始终都是innoDB,一直都是。我已经检查了相关的表,它确实是innoDB。现在来看看问题所在。
我有一个数据库实例和模型实例通过这个事务同时操作同一个数据库:
$db->beginTransaction();
try {
// Run an insert
$model_record->insert(array('single_item' => 'its value'));
// More logic, and run an update.
$model_record->this_value = 'that';
// Save it
$model_record->save();
//Commit the transaction
$db->commit();
} catch (Exception $e) {
// It finds the rollback, yet does nothing.
$db->rollBack();
}
现在,我发现这个功能无法正常工作的原因是,在测试中超出了一行字符限制,以确保所有的逻辑都是正确的。
它没有回滚。除此之外,记录“single_item”已经存在于数据库中。但是更新后的值并没有。
我是不是漏掉了一些小细节?我从来没有在MySQL和innoDB中遇到过事务问题。这可能与MySQL或ZF有关吗?任何见解都很有帮助,谢谢。
更新:
我进行了几次测试,以下是一些可能有用的结果:
$this->_db->beginTransaction();
// This works
$this->_db->insert('table_a',
array(
'a_field' => 'transaction test',
)
);
// This does not work, at all. It inserts and does not rollback. There is no commit.
$_table_a_model->insert(
array(
'a_field' => 'transaction test',
)
);
$this->_db->rollback();
额外更新 您需要获取模型的实例,并在其上调用事务。
$the_model = $this->_model->getAdapter();
$the_model->beginTransaction();
这样做不留下为多个表执行事务的空间,而不是为每个模型实例执行多个事务。有没有其他办法而不必返回到基本数据库实例?