2015-09-16 26 views
1

在Propel2 ORM(http://propelorm.org/documentation/05-transactions.html)的文檔中,有一個示例說明如何在事務中包裝查詢。在Propel2中有多個表的交易

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME); 

我怎樣才能得到一個全球性的PDO連接對象或2個表(例如「帳戶」和「書」)的連接:連接到單個數據庫表「賬戶」做?

例如這是(在僞代碼)我想有:

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME, 
            BookTableMap::DATABASE_NAME); 

回答

3

你引用的例子使得它相當普通。在你的問題中,你的錯誤就像你說的一樣想着連接到一個單一的數據庫表「Account」:。沒有連接總是對整個數據庫。 Propel只是提供了一種獲取使用表格作爲參數的連接句柄的方式,讓我感到困惑。

您任何表做

$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME); 

,只是爲了讓$con連接句柄。

事務由連接控制,而不是語句。因此,一旦擁有連接對象,您就可以開始一個事務,並且事務的整個關鍵點是您可以將該事務中的任意數量的表更改爲單個工作單元(事務)。

所以一旦你有$con手柄開始交易

$con->beginTransaction(); 

,你作出這樣的聲明之間的任何修訂和

$con->commit(); 

OR

$con->rollback(); 

將全部共同承擔或全部歸還。