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