laravel连接不同数据库的升级版,动态切换

1.设置公共函数,盛放不同的数据库配置

       我这里创建app\Common\help.php里放我的代码

<?php
if(!function_exists("databaseConnection")) {

    function databaseConnection($airportIata)
    {
        $connections = [
            'd1' => [
                'driver' => 'mysql',
                'host' => 'xxxxxxxx',//放不同的地址
                'port' => '3306',
                'database' => 'shopping',
                'username' => 'shopping',
                'password' => 'aa',
                'prefix' => 'shop_',
            ],
            'd2' => [
                'driver' => 'mysql',
                'host' => '127.0.0.1',
                'port' => '3306',
                'database' => 'AAA',
                'username' => 'root',
                'password' => 'root',
                'prefix' => '',
            ],
            'd3' => [
                'driver' => 'mysql',
                'host' => '127.0.0.1',
                'port' => '3306',
                'database' => 'aaa',//本地不同的数据库
                'username' => 'root',
                'password' => 'root',
                'prefix' => '',
            ],
        ];
        if (isset($connections[$airportIata])) {
            return $connections[$airportIata];
        } else {
            return [];
        }
    }
}

2.把help.php里的方法变成公共函数,在composer.json里配置

输入命令  更新配置

composer dump-autoload

3.创建中间件,接收不同参数,设置不同的mysql配置

php artisan make:middleware ChangeDatabase

 内容如下

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;

class ChangeDatabase
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {

        $con = databaseConnection($request->airportIata);
        if (!$con) {
            return response()->json(['msg'=>'缺少参数']);
        };
        DB::purge('mysql');//断开数据库 disconnect不行,一定要清除
        Config::set('database.connections.mysql', $con);
        DB::connection('mysql');
        return $next($request);

    }
}

4.postman测试,传入想要的数据库的参数,例如d2

 

传入d1

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值