Php Lumen-在运行时创建数据库连接

Php Lumen-在运行时创建数据库连接,php,postgresql,sqlite,laravel,lumen,Php,Postgresql,Sqlite,Laravel,Lumen,在Lumen项目中,我需要在运行时创建数据库连接,但每次尝试使用最近创建的连接时,都会出现“数据库[…]未配置”错误 这是我在routes.php上的测试代码: <?php $app->get('/', function () use ($app) { $config = $app->make('config'); $config->set('database.connections.retail_db', [ 'driver' =

在Lumen项目中,我需要在运行时创建数据库连接,但每次尝试使用最近创建的连接时,都会出现“数据库[…]未配置”错误

这是我在routes.php上的测试代码:

<?php

$app->get('/', function () use ($app) {

    $config = $app->make('config');
    $config->set('database.connections.retail_db', [
        'driver'   => 'pgsql',
        'host'     => env('RETAIL_DB_HOST', 'localhost'),
        'port'     => env('RETAIL_DB_PORT', 5432),
        'database' => env('RETAIL_DB_DATABASE', 'forge'),
        'username' => env('RETAIL_DB_USERNAME', 'forge'),
        'password' => env('RETAIL_DB_PASSWORD', ''),
        'charset'  => env('RETAIL_DB_CHARSET', 'utf8'),
        'prefix'   => env('RETAIL_DB_PREFIX', ''),
        'schema'   => env('RETAIL_DB_SCHEMA', 'public'),
    ]);
    return app('db')->connection('retail_db')->select("SELECT * FROM users");

});

您选择的方法有一个主要问题:

您没有初始化任何配置对象。默认情况下,Lumen没有传统的配置对象集,直到您在根文件夹中创建一个
config
目录

如合同中所述:

Lumen framework的所有配置选项都存储在.env文件中

您所采用的方法需要使用Laravel中使用的传统配置对象

要使该对象和新的
retail\u db
数据库连接正常工作:

  • 在项目根目录中创建一个
    config
    文件夹
  • 将文件
    vendor/laravel/lumen framework/config/database.php
    复制到此配置文件夹
  • 使用
    $app->configure('database')初始化
    bootstrap/app.php
    中的数据库配置对象(放在第28行)
您的文件夹结构现在如下所示:

├── app
├── bootstrap
├── config
   └── database.php
├── database
├── public
├── resources
├── storage
├── tests
└── vendor
当然,您可以从
app/config/database.php
中的connections数组中删除不需要的连接,方法是注释或完全删除它们

app/config/database.php

“连接”=>[
/*“测试”=>[
“驱动程序”=>“sqlite”,
'数据库'=>':内存:',
],*/
“sqlite”=>[
“驱动程序”=>“sqlite”,
'database'=>env('DB_database',base_path('database/database.sqlite'),
'前缀'=>env('DB_前缀',''),
],
“mysql”=>[
“驱动程序”=>“mysql”,
'host'=>env('DB_host','localhost'),
“端口”=>env(“DB_端口”,3306),
'database'=>env('DB_database','forge'),
'username'=>env('DB_username','forge'),
'password'=>env('DB_password',''),
'charset'=>env('DB_charset','utf8'),
'collation'=>env('DB\u collation','utf8\u unicode\u ci'),
'前缀'=>env('DB_前缀',''),
'timezone'=>env('DB_timezone','+00:00'),
'strict'=>env('DB\u strict\u MODE',false),
],
]
您的bootstrap/app.php及其更改:

/*
|--------------------------------------------------------------------------
|创建应用程序
|--------------------------------------------------------------------------
|
|在这里,我们将加载环境并创建应用程序实例
|这是该框架的核心部分。我们用这个
|应用程序作为此框架的“IoC”容器和路由器。
|
*/
$app=new Laravel\Lumen\Application(
实路径(\uuuu DIR\uuuu.'/../'))
);
//$app->withFacades();
//$app->withelount();
$app->configure('database');
现在,您可以使用
routes.php
中已有的代码

要删除您的
retail\u db
连接,只需将其设置为
null

$config->set('database.connections.retail_db',null);
回答@jhon的问题 Lumen不提供配置文件夹,您需要在根目录下创建名为
config
的新目录

然后在它里面复制@codedge提到的关于
database.php
文件的内容

user$ cd projectPath/
user$ mkdir config
user$ cp vendor/laravel/lumen-framework/config/database.php config/database.php
将文件vendor/laravel/lumen framework/config/database.php复制到此config文件夹

按照终端中的以下命令创建
config
目录并复制
database.php
文件

user$ cd projectPath/
user$ mkdir config
user$ cp vendor/laravel/lumen-framework/config/database.php config/database.php
其中,此配置文件夹是您刚刚创建的
config
目录。 所以它看起来像下图。

@ClaudioKing我已经阅读了文档,但是如果没有提到运行时的数据库连接,我们如何使用$config=$app->make('config');在控制员的行动中,请告诉我。谢谢。谢谢@codedge这是我需要的。但是出于好奇,我如何删除新创建的连接呢?对于删除,只有一种方法,将其设置为null-i updated,我的答案。我们如何使用$config=$app->make('config');在控制员的行动中,请告诉我。谢谢。请将database.php文件放在config/database.php而不是app/config/database.php位置,不要忘记在.env文件中注释/删除db凭据,并通过命令行重新启动lumen services。它起作用了。谢谢@codedge.Hello,我正在使用Lumen 8.2.3,当我创建新项目时,我没有看到config/database.php或config文件,我应该创建新项目吗?或者有创建配置文件的命令?谢谢