如题

其实这不是Laravel框架的原因,网上有查到java程序,使用Mysql多库进行事物处理,也需要指定库。

Laravel框架项目中使用了多个库,将业务分库储存,Model中指定了连接的库。

protected $connection = 'mysql_bms';

代码中使用事务处理

DB::beginTransaction();
try{
    ....
    DB::commit();
}
catch (Exception $e){
    DB::rollback();
}

今天测定测试发现事务处理并不生效。

研究了好长时间才发现,原来是连接多库的原因,事务处理需要这样写:

DB::connection('mysql_bms')->beginTransaction();
try{
    ....
    DB::connection('mysql_bms')->commit();
}
catch (Exception $e){
    DB::connection('mysql_bms')->rollback();
}

程序中只使用该业务单个库的表,所以指定连接就可以了,那么程序中混合使用多库的表呢?

网上查到java程序的解决方案,应该也适合PHP,那就是程序使用的表,连接多库,每个都要进行事务处理

DB::connection('库1')->beginTransaction();
DB::connection('库2')->beginTransaction();
try{
    ....
    DB::connection('库1')->commit();
    DB::connection('库2')->commit();
}
catch (Exception $e){
    DB::connection('库1')->rollback();
    DB::connection('库2')->rollback();
}

没实际应用,有机会在工作中检验一下。


大尾狼
60 声望3 粉丝