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


ZF2 saving to multiple tables, (1) roll back changes if database error (2) display db errors

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

假设有一些东西阻止保存到第三个表(例如,唯一约束失败)。因为表格是依次填充的,所以表 1 和 2 被填充,但第三个没有。因此,我只剩下表 1 和表 2 中未使用的数据。

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

找到了 SO 答案。

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块。