我有用流明(laravel)编写的API。我正在为我的模特使用Eloquent
我需要做的是使用基于url(端点)的不同数据库。
例如,我有http://apiprovider.com/api/v1/
作为基本API网址,它连接到api_v1
数据库,但如果使用v http://apiprovider.com/api/v2
实例api_v2
数据库,我需要使用另一个数据库。
所有类和laravel应用程序应该是相同的,根据版本只有不同的数据库。
数据库设置存储在.env
文件中。
请建议实施此方法的正确方法?或至少可能的方式。 感谢。
答案 0 :(得分:2)
这只是一个想法,我没有尝试过,但一个简单的方法是从中间件切换两个数据库。
例如,您可以在database.php
中定义两个可用的连接:
'connections' => [
'mysql1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'mysql2' => [
'driver' => 'mysql',
'host' => env('DB_HOST_2', 'localhost'),
'database' => env('DB_DATABASE_2', 'forge'),
'username' => env('DB_USERNAME_2', 'forge'),
'password' => env('DB_PASSWORD_2', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
]
然后创建一个中间件并在handle方法中切换DB
public function handle($request, Closure $next)
{
//check the request URL and decide what DB to use
//set the DB for this request
Config::set('database.default', $dbname );
}
我认为Config::set('database.default', $dbname);
仅适用于当前请求,但它可以满足您的需求