# 事務操作
事務操作的傳參說明,分為以下兩種傳參情況
| 參數類型 | 參數說明 |
| --- | --- |
| string或array | 值為connectionName,代表當前協程下連接名相符的mysql鏈接執行事務 |
| ClientInterface | 在invoke閉包中直接傳入client,代表直接操作指定客戶端 |
返回說明:bool 開啟成功則返回true,開啟失敗則返回false
## 開啟事務
~~~php
DbManager::getInstance()->startTransaction($connectionNames = 'default');
~~~
## 提交事務
~~~php
DbManager::getInstance()->commit($connectName = null);
~~~
## 回滾事務
~~~php
DbManager::getInstance()->rollback();
~~~
## 事務用例1
~~~php
$user = UserModel::create()->get(4);
$user->age = 4;
// 開啟事務
$strat = DbManager::getInstance()->startTransaction();
// 更新操作
$res = $user->update();
// 直接回滾 測試
$rollback = DbManager::getInstance()->rollback();
// 返回false 因為連接已經回滾。事務關閉。
$commit = DbManager::getInstance()->commit();
var_dump($commit);
~~~
## 事務用例2
~~~php
$user = DbManager::getInstance()->invoke(function ($client){
// 使用事務方式 具體說明查看文檔 http://www.easyswoole.com/Cn/Components/Orm/transactionOperations.html
DbManager::getInstance()->startTransaction($client);
$testUserModel = Model::invoke($client);
$testUserModel->state = 1;
$testUserModel->name = 'Siam';
$testUserModel->age = 18;
$testUserModel->addTime = date('Y-m-d H:i:s');
$data = $testUserModel->save();
DbManager::getInstance()->commit($client);
return $data;
});
var_dump($user);
~~~