Laravel框架Mysql连接多库时事物处理需要指定库
Posted 大尾狼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel框架Mysql连接多库时事物处理需要指定库相关的知识,希望对你有一定的参考价值。
如题
其实这不是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();
}
没实际应用,有机会在工作中检验一下。
以上是关于Laravel框架Mysql连接多库时事物处理需要指定库的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis6:MyBatis集成Spring事物管理(下篇)