Laravel之事务

表必须是InnoDB引擎

DB::beginTransaction();
try {
     $name  'abc' ;
     $result1  = Test::create([ 'name' => $name ]);
     if  (! $result1 ) {
         /**
          * Exception类接收的参数
          * $message = "", $code = 0, Exception $previous = null
          */
         throw  new  \Exception( "1" );
     }
     $result2  = Test::create([ 'name' => $name ]);
     if  (! $result2 ) {
         throw  new  \Exception( "2" );
     }
     DB::commit();
catch  (\Exception  $e ){
     DB::rollback(); //事务回滚
     echo  $e ->getMessage();
     echo  $e ->getCode();
}

  注意:如果id是自增的话,mysql的primary key是在内存中维护的,事务回滚是不会回退id,所以中间会出现断层



Laravel中,分布式事务可以通过将门面DB替换为RT来实现。首先,你需要安装laravel5.5 - laravel8之间的版本,并安装composer包。然后,在你的代码中,将DB::beginTransaction()和DB::commit()分别替换为RT::beginTransaction()和RT::commit(),以实现分布式事务。具体的代码例子可以参考如下: ```php <?php use Illuminate\Support\Facades\DB; use Laravel\ResetTransaction\Facades\RT; RT::beginTransaction(); // 在分布式事务内部执行的代码 // ... RT::commit(); ``` 为了测试分布式事务,你需要创建三个MySQL数据库实例(order,storage,account),三个控制器,三个模型,并在phpunit.xml中添加一个名为Transaction的testsuite。然后,启动Web服务器,执行以下命令完成这些操作: ```bash php artisan resetTransact:create-examples && php artisan serve --host=0.0.0.0 --port=8000 ``` 这样就完成了Laravel分布式事务的设置和准备工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Laravel基于RT模式实现分布式事务(突破技术支持子服务嵌套事务)](https://blog.csdn.net/DongShiXiaRen/article/details/122665094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值