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");
});
このコードはLaravelで動作するはずですが、Lumenに関する情報が見つかりません。
最新のルーメンバージョンを使用しています。
あなたがしようとしている方法には1つの主な問題があります:
構成オブジェクトを初期化しませんでした。ルートフォルダにconfig
ディレクトリを作成するまで、Lumenにはデフォルトで従来の設定オブジェクトが設定されていません。
Lumen構成ドキュメント に書かれているように:
Lumenフレームワークのすべての構成オプションは、.envファイルに保存されます。
目的のアプローチには、Laravelで使用されている従来の構成オブジェクトが必要です。
そのオブジェクトと新しい_retail_db
_データベース接続を機能させるには:
config
フォルダーを作成しますvendor/laravel/Lumen-framework/config/database.php
_をこの構成フォルダーにコピーしますbootstrap/app.php
_のデータベース構成オブジェクトを$app->configure('database');
で初期化します(28行目に配置します)フォルダ構造は次のようになります。
_├── app
├── bootstrap
├── config
└── database.php
├── database
├── public
├── resources
├── storage
├── tests
└── vendor
_
もちろん、コメントを付けるか完全に削除することで、_app/config/database.php
_の接続配列から不要な接続を削除できます。
app/config/database.php
_'connections' => [
/*'testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
],*/
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', base_path('database/database.sqlite')),
'prefix' => env('DB_PREFIX', ''),
],
'mysql' => [
'driver' => 'mysql',
'Host' => env('DB_Host', 'localhost'),
'port' => env('DB_PORT', 3306),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'collation' => env('DB_COLLATION', 'utf8_unicode_ci'),
'prefix' => env('DB_PREFIX', ''),
'timezone' => env('DB_TIMEZONE', '+00:00'),
'strict' => env('DB_STRICT_MODE', false),
],
]
_
bootstrap/app.phpの変更点:
_/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| Here we will load the environment and create the application instance
| that serves as the central piece of this framework. We'll use this
| application as an "IoC" container and router for this framework.
|
*/
$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);
//$app->withFacades();
// $app->withEloquent();
$app->configure('database');
_
これで、_routes.php
_に既にあるコードを使用できます。
_retail_db
_接続を削除するには、接続をnull
に設定します。
_$config->set('database.connections.retail_db', null);
_