2016-03-07 64 views
0

在ZF2中,我有一個映射器,將數據保存到3個表中。表1只有id s,表2和3有id s以及更多數據。依次填充表格:第一個表格1,然後是表格2,然後是表格3.ZF2保存到多個表,(1)回滾更改,如果數據庫錯誤(2)顯示數據庫錯誤

假設有些東西阻止保存到第三個表格(例如,唯一約束失敗)。因爲桌子依次填滿,表格1和2被填滿,但第三個不填。所以我留下了表1和表2中未使用的數據。

如何擺脫表1和表2中創建的值,如果發生數據庫錯誤並在第三個表中顯示錯誤消息?

+0

您應該將寫入操作包裝到單個事務中,因此如果有任何操作失敗,它將全部回滾。 –

+0

@MattGibson,你能告訴如何? –

回答

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