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连接多库时事物处理需要指定库的主要内容,如果未能解决你的问题,请参考以下文章

ODI多库抽取到一个库解决方案II

mysql备份与恢复多库备份

MyBatis6:MyBatis集成Spring事物管理(下篇)

Laravel 5:处理多个连接和测试

Laravel 5.1 框架默认不支持 MySQL 8.0 数据库,如果需要支持,请参考以下方法

Laravel 5.1 框架默认不支持 MySQL 8.0 数据库,如果需要支持,请参考以下方法