2014-02-09 42 views

回答

0

覆蓋getDbConnection()的CActiveRecord,並添加如果在使用像private $inUse另一個屬性然後檢查這個,

或有一個表,但是這將是緩慢的檢查每一次。

0

我使用PostgreSQL。爲了備份數據庫,它使用一個外部工具(pg_dump),該工具獲取數據庫的穩定一致的快照。如果存在正在進行的事務,則快照將具有事務開始之前的狀態。我認爲MySQL有一個類似的工具。

無論你使用什麼數據庫服務器,如果你想知道是否有活動的事務,你可以使用你的數據庫的標準PDO object

$db=Yii::app()->db; 
$pdo=$db->getPdoInstance(); 
if ($pdo->inTransaction(){ 
    echo "We have an active transaction"; 
} else { 
    echo "Let's start Database dump"; 
} 
+0

謝謝,但我還是錯過了一些東西,比方說我到了'else'部分,誰說那個人確實沒有開始交易? 順便說一句我正在使用SQLite – user1908466

+0

你可以存儲在一個全局參數 - 看:[SetGolbalState](http://www.yiiframework.com/doc/api/1.1/CApplication#setGlobalState-detail) - 一個標誌指示該數據庫正在備份並在應用程序的每個控制器中進行檢查,以避免此標誌打開時出現該問題。 –