Php Lumen-在运行时创建数据库连接
在Lumen项目中,我需要在运行时创建数据库连接,但每次尝试使用最近创建的连接时,都会出现“数据库[…]未配置”错误 这是我在routes.php上的测试代码: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' =
<?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文件,我应该创建新项目吗?或者有创建配置文件的命令?谢谢