2016-05-13 22 views
3

Lumenプロジェクトでは、実行時にデータベース接続を作成する必要がありますが、最近作成されたデータベースを使用しようとするたびに「Database [...] not configured」エラーが発生します。接続。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に動作するようになっているが、私はルーメンに関するあらゆる情報を見つけることができません。

私は最新のルーメンバージョンを使用しています。

は、あなたが任意の設定オブジェクトを初期化できませんでした:

+0

https://lumen.laravel.com/docs/5.2/database –

+0

@ClaudioKing私はドキュメントを読んで、しかしdoesnの場合ました実行時にデータベース接続について何も言わないでください。 – BernalCarlos

答えて

3

あなたがのために行くされている方法で一つのメイン問題があります。ルーメンには、ルートフォルダにconfigディレクトリを作成するまで、デフォルトでは従来の設定オブジェクトセットがありません。 Lumen configuration docsで書かれたよう

ルーメンのフレームワークの設定オプションのすべてが.envファイルに格納されています。

あなたが進めているアプローチでは、Laravelで使用されている従来の設定オブジェクトが必要です。そのオブジェクトと新しいretail_dbデータベース接続の作業を取得するには

  • プロジェクトのルートにconfigフォルダを作成します

    • をコピーしたファイルvendor/laravel/lumen-framework/config/database.phpこのconfigフォルダ
    • にデータベースの設定を初期化しますあなたのapp/bootstrap.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); 
    
  • +0

    ありがとうございます@codedgeこれは私が必要なものです。しかし、好奇心のために、新しく作成された接続をどのように削除できますか? – BernalCarlos

    +1

    削除の方法は、nullに設定するだけです - 更新しました。 – codedge

    関連する問題