【问题标题】:Using multiple databases for different endpoints为不同的端点使用多个数据库
【发布时间】:2016-03-09 12:31:17
【问题描述】:

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

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

请提出正确的实施方式?或者至少可能的方式。 谢谢。

【问题讨论】:

    标签: php database .htaccess api laravel


    【解决方案1】:

    这只是一个想法,我还没有尝试过,但一种简单的方法是从中间件在两个数据库之间切换。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多