Yii2中事務的使用


官方是這樣的

// $connection其實是數據庫連接
$transaction = $connection->beginTransaction(); try { $connection->createCommand($sql1)->execute(); $connection->createCommand($sql2)->execute(); // ... executing other SQL statements ... $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); }

其實可以這樣使用

$transaction = Yii::$app->db->beginTransaction();
try {
    // ... executing other SQL statements ...
    $transaction->commit();
} catch (\Exception $e) {
    $transaction->rollBack();
}

 

原因)創建數據庫連接(Creating DB Connections)

想要訪問數據庫,你首先需要通過創建一個 yii\db\Connection 實例來與之建立連接。

$db = new yii\db\Connection([
    'dsn' => 'mysql:host=localhost;dbname=example',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
]);

因為數據庫連接經常需要在多個地方使用到, 一個常見的做法是以應用組件的方式來配置它,如下:

return [
    // ...
    'components' => [
        // ...
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=example',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
    ],
    // ...
];

之后你就可以通過語句 Yii::$app->db 來使用數據庫連接了。

 

對於隔離級別,yii\db\Transaction 也提前定義了幾個常量:

const READ_UNCOMMITTED = 'READ UNCOMMITTED';    // 讀未提交
const READ_COMMITTED = 'READ COMMITTED';      //  讀提交
const REPEATABLE_READ = 'REPEATABLE READ';     //  可重復讀
const SERIALIZABLE = 'SERIALIZABLE';        // 串行化

可以直接使用

// 開啟事務 隔離級別 串行化
$transaction = Yii::$app->db->beginTransaction( yii\db\Transaction::SERIALIZABLE);

MySQL 事務隔離級別
忘了的可以看看這個

MySQL事務是不支持嵌套的,但是Yii2框架使用了緩存,可以使用事務嵌套,同學們可以打開下面鏈接看看
深入理解Yii2.0之事務(Transaction)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM