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

标签 php database .htaccess api laravel

我有用 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/

相关文章:

php - SQL语句选择出现次数超过2次的重复记录

php - PHP 的 opcache 何时重新解析文件?

database - 在卖家有很多产品和产品有很多卖家的 Postgresql 数据库中,价格应该存储在哪里?

mysql - 如何从 MySQL 迁移到 Cassandra 建模

php - .htaccess 正则表达式水印

php - 将 id 从 iOS 应用程序发送到 php 到 mysql

php - 如何移动 mysql 数据库最简单和最快的方法?

jquery - 我如何在 SQL 中提出这个查询?

wordpress - 在 htaccess 文件中阻止 IP 范围

wordpress - WordPress的重写规则说明