在ZF2中,我有一个将数据保存到3个表中的映射器。表1仅有id
s,表2和3具有id
s和更多数据。表格依次填写:第一个表格1,然后是表格2,然后是表格3。
假设存在阻止保存到第3个表的内容(例如,唯一约束失败)。因为表格依次填充,所以表格1和表格2已填写,但第3表格不填写。所以我留下了表1和表2中未使用的数据。
如果出现数据库错误,如何摆脱表1和表2中创建的值,并在第3个表中显示错误消息?
答案 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
区块。