事务操作

  • DbManager 链接管理器提供

DbManager操作事务

传参说明(代码示例看下文)

参数类型参数说明
string或array值为connectionName,代表当前协程下连接名相符的mysql链接执行事务
ClientInterface在invoke闭包中直接传入client,代表直接操作指定客户端

返回说明:bool 开启成功则返回true,开启失败则返回false

  • DbManager->startTransaction($connection = ‘default’ ); // 参数名默认为default
  • DbManager->commit($connection = ‘default’); // 如果不传,则提交当前协程下连接名称为default的事务
  • DbManager->rollback($connection = ‘default’); // 如果不传,则回滚当前协程下连接名称为default的事务

Client 直接管理

无需传参

返回说明:bool 开启成功则返回true,开启失败则返回false

  • ClientInterface->startTransaction();
  • ClientInterface->commit();
  • ClientInterface->rollback();

代码示例1

DbManager 管理事务 ,可以开启多个连接名下的客户端事务,进行多连接事务管理

  1. try{
  2. //开启事务
  3. DbManager::getInstance()->startTransaction();
  4. $res = $model->update(['is_vip'=>1]);
  5. } catch(\Throwable $e){
  6. //回滚事务
  7. DbManager::getInstance()->rollback();
  8. } finally {
  9. //提交事务
  10. DbManager::getInstance()->commit();
  11. }

代码示例2

DbManager 管理事务,传递参数为ClientInterface类型,指定操作客户端

效果等同于示例3,直接操作客户端

  1. // 指定取出 write 连接名下的客户端,并且执行开启事务
  2. \EasySwoole\ORM\DbManager::getInstance()->invoke(function (EasySwoole\ORM\Db\ClientInterface $client){
  3. // 开启事务
  4. \EasySwoole\ORM\DbManager::getInstance()->startTransaction($client);
  5. // ...
  6. }, 'write');