ZF2保存到多个表,(1)如果数据库错误(2)显示db错误,则回滚更改

时间:2016-03-07 17:57:38

标签: php mysql zend-framework2

在ZF2中,我有一个将数据保存到3个表中的映射器。表1仅有id s,表2和3具有id s和更多数据。表格依次填写:第一个表格1,然后是表格2,然后是表格3。

假设存在阻止保存到第3个表的内容(例如,唯一约束失败)。因为表格依次填充,所以表格1和表格2已填写,但第3表格不填写。所以我留下了表1和表2中未使用的数据。

如果出现数据库错误,如何摆脱表1和表2中创建的值,并在第3个表中显示错误消息?

1 个答案:

答案 0 :(得分:0)

找到了答案。

https://stackoverflow.com/a/13862746/4685379

但是,这个答案没有说明如何实现对多个表的插入。关键是将所有插入放在beginTransaction()commit()方法之间,如下所示:

try {
    $this->getAdapter()->getDriver()->getConnection()->beginTransaction();

    // your inserts go here

    $this->getAdapter()->getDriver()->getConnection()->commit();
} catch (\Exception $e) {
    $this->getAdapter()->getDriver()->getConnection()->rollback();
    throw $e;
}

rollback()然后进入catch区块。