事务操作
- DbManager 连接管理器提供
DbManager 操作事务
传参说明(代码示例看下文)
参数类型 | 参数说明 |
---|---|
string 或 array | 值为 $connectionName (即连接名),代表使用当前协程下连接名为 $connectionName 的 mysql 连接执行事务 |
ClientInterface | 在 invoke 闭包中直接传入 client,代表直接操作指定 mysql 客户端 |
返回值说明:bool
。开启成功则返回 true
,开启失败则返回 false
。
开启事务
// $connection 参数默认为 'default',表示使用当前协程下连接名为 $connectionName 的 mysql 连接开启事务
\EasySwoole\ORM\DbManager::getInstance()->startTransaction($connection = 'default');
提交事务
// 如果不传 'default',则提交当前协程下连接名称为 default 的事务
\EasySwoole\ORM\DbManager::getInstance()->commit($connection = 'default');
回滚事务
// 如果不传 'default',则回滚当前协程下连接名称为 default 的事务
\EasySwoole\ORM\DbManager::getInstance()->rollback($connection = 'default');
Client 直接管理
无需传参
返回值说明:bool
。开启成功则返回 true
,开启失败则返回 false
。
- ClientInterface->startTransaction();
- ClientInterface->commit();
- ClientInterface->rollback();
代码示例1
DbManager 管理事务 ,可以开启多个连接名下的客户端事务,进行多连接事务管理
try {
// 开启事务
\EasySwoole\ORM\DbManager::getInstance()->startTransaction();
// 执行更新 $model 的更新操作
$model = new UserModel();
$res = $model->update(['is_vip' => 1]);
// 提交事务
\EasySwoole\ORM\DbManager::getInstance()->commit();
} catch(\Throwable $e){
// 回滚事务
\EasySwoole\ORM\DbManager::getInstance()->rollback();
}
代码示例2
DbManager
管理事务,传递参数为 ClientInterface
类型,指定操作客户端
效果等同于上文代码示例3,直接操作客户端
// 指定取出 write 连接名下的客户端,并且执行开启事务
\EasySwoole\ORM\DbManager::getInstance()->invoke(function (EasySwoole\ORM\Db\ClientInterface $client){
// 开启事务
\EasySwoole\ORM\DbManager::getInstance()->startTransaction($client);
// ...
}, 'write');