为不同的端点使用多个数据库

时间:2015-12-04 14:32:24

标签: php database .htaccess api laravel

我有用流明(laravel)编写的API。我正在为我的模特使用Eloquent 我需要做的是使用基于url(端点)的不同数据库。 例如,我有http://apiprovider.com/api/v1/作为基本API网址,它连接到api_v1数据库,但如果使用v http://apiprovider.com/api/v2实例api_v2数据库,我需要使用另一个数据库。
所有类和laravel应用程序应该是相同的,根据版本只有不同的数据库。

数据库设置存储在.env文件中。

请建议实施此方法的正确方法?或至少可能的方式。 感谢。

1 个答案:

答案 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);仅适用于当前请求,但它可以满足您的需求