如何在 Lumen 中使用多个数据库

Posted

技术标签:

【中文标题】如何在 Lumen 中使用多个数据库【英文标题】:How to use multiple database in Lumen 【发布时间】:2018-01-25 12:53:37 【问题描述】:

我们已经使用 Lumen 来构建 API,现在我们需要访问多个数据库。

目前使用.env 进行数据库配置,但无法在.env 中找到多个数据库的路径

我们需要读取第二个连接的地方...

【问题讨论】:

我们需要两个数据库 How to use multiple database in Laravel的可能重复 【参考方案1】:

首先,您需要配置连接。如果您还没有,则需要在项目中创建一个config 目录并添加文件config/database.php。它可能看起来像这样:

<?php

return [

   'default' => 'accounts',

   'connections' => [
        'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST'),
            'port'      => env('DB_PORT'),
            'database'  => env('DB_DATABASE'),
            'username'  => env('DB_USERNAME'),
            'password'  => env('DB_PASSWORD'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
         ],

        'mysql2' => [
            'driver'    => 'mysql',
            'host'      => env('DB2_HOST'),
            'port'      => env('DB_PORT'),
            'database'  => env('DB2_DATABASE'),
            'username'  => env('DB2_USERNAME'),
            'password'  => env('DB2_PASSWORD'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
    ],
];

添加connection 配置后,您可以通过从容器中取出数据库管理器对象并调用-&gt;connection('connection_name') 来访问它们。

// Use default connection
app('db')->connection()->select('xx');
DB::connection()->select('yy');

// Use mysql2 connection
app('db')->connection('mysql2')->select('xx');
DB::connection('mysql2')->select('yy');

希望对你有帮助!!

【讨论】:

这个文件在/vendor/laravel/luman-framework/目录下。修改这样的文件可以吗?似乎它应该是一种将其放置在存储库可以通知开发组的其他成员他们需要定义新环境变量的地方的方法。有什么想法吗? @GaboLato:您好,感谢您的提问!在vendor 文件夹中进行更改是不好的。请找到该文件,如果您想查看更多信息,请访问此链接:***.com/questions/37215265/… 因为如果您在 vendor 文件夹中进行更改,它只会在您的本地服务器中更改,而不是在您的产品服务器中,您还需要在产品服务器的 vendor 文件夹中进行更改不是一个好习惯! 我发现如果您在项目的根目录中创建一个目录/config 和一个文件database.php,lumen 将覆盖供应商的文件。谢谢! 另外一个需要在 bootstrap/app.php 中添加的东西是 $app->configure('database');【参考方案2】:

这也有效。在当前版本的 Lumen 5.7 中

config/database.php

<?php

return [

    'default' => env('DB_CONNECTION', 'sqlsrv'),
    'migrations' => 'migrations',
    'connections' => [
        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],

        'sqlsrv2' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE2', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],
    ],
];

.env

DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_PORT=1433
DB_DATABASE=database1
DB_USERNAME=username
DB_PASSWORD=password

DB_DATABASE2=database2

用法:

型号:protected $connection = 'sqlsrv2'; 其他:-&gt;connection('sqlsrv2')

希望能帮到你!

参考:https://fideloper.com/laravel-multiple-database-connections

【讨论】:

谢谢,得到了我想要的东西。雄辩的多个数据库连接

以上是关于如何在 Lumen 中使用多个数据库的主要内容,如果未能解决你的问题,请参考以下文章

Lumen / Laravel问题中的多个查询

在多个文件中拆分 Lumen 6.X 路由

lumen 6:如何在 lumen 上重构响应分页的数据?

如何在共享主机中为 Lumen 应用程序设置 cron 作业(使用 CPanel)?

在 Lumen 中使用验证器进行工匠命令

如何设置此数据的更新 - Laravel/Lumen