我有用 lumen(laravel) 编写的 API。我正在为我的模型使用 Eloquent。
我需要做的是根据url(端点)使用不同的数据库。
例如,我有 http://apiprovider.com/api/v1/
作为基本 API url,它连接到 api_v1
数据库,但如果我需要使用另一个数据库v2 使用 http://apiprovider.com/api/v2
例如 api_v2
数据库。
所有类和 laravel 应用程序应该是相同的,只是根据版本不同的数据库。
数据库设置存储在.env
文件中。
请建议正确的实现方式?或者至少是可能的方式。 谢谢。
最佳答案
这只是一个想法,我还没有尝试过,但一个简单的方法是通过中间件在两个数据库之间切换。
例如,您可以在 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);
仅对当前请求有效,但它会满足您的需要
关于php - 为不同的端点使用多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090641/