Zend Framework数据库事务 - 无法回滚

wes*_*ide 6 php mysql zend-framework transactions

好吧,让我先把它弄清楚.我的问题与此类似: 无法在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();  
}
Run Code Online (Sandbox Code Playgroud)

现在,我发现这不起作用的原因是我在测试期间超出了一行的字符限制,以确保所有逻辑都正确.

它没有回滚.最重要的是,带有'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();
Run Code Online (Sandbox Code Playgroud)

其他更新 您需要获取模型的实例,并在其上调用事务.

$the_model = $this->_model->getAdapter();
$the_model->beginTransaction();
Run Code Online (Sandbox Code Playgroud)

这为多个表的事务留下了空间,而不为每个模型实例执行多个事务.没有恢复到基础数据库实例的任何想法?

wes*_*ide 4

我想到了。我必须使用它$db = Zend_Db_Table_Abstract::getDefaultAdapter();,然后运行我的事务,以便多个模型中的所有操作在单个事务下协同工作。如果有人对此有解决办法,请随时发表评论。