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