PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Lumen:crea una connessione al database in fase di esecuzione

C'è un problema principale con il metodo che stai cercando:

Non hai inizializzato alcun oggetto di configurazione. Lumen per impostazione predefinita non ha un set di oggetti di configurazione tradizionale, finché non crei un config directory nella tua cartella principale.

Come scritto nei documenti di configurazione di Lumen:

Tutte le opzioni di configurazione per il framework Lumen sono archiviate nel file .env.

L'approccio che stai cercando richiede l'oggetto di configurazione tradizionale utilizzato in Laravel.

Per ottenere quell'oggetto e il tuo nuovo retail_db connessione al database funzionante:

  • Crea una config cartella nella radice del tuo progetto
  • Copia il file vendor/laravel/lumen-framework/config/database.php in questa cartella di configurazione
  • Inizializza l'oggetto di configurazione del database nel tuo bootstrap/app.php con $app->configure('database'); (mettilo alla riga 28)

La struttura della tua cartella ora è simile a questa:

├── app
├── bootstrap
├── config
   └── database.php
├── database
├── public
├── resources
├── storage
├── tests
└── vendor

Ovviamente puoi rimuovere quelle connessioni che non ti servono dall'array di connessioni in app/config/database.php commentandoli o rimuovendoli completamente.

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),
        ],
]

Il tuo bootstrap/app.php con le modifiche:

/*
|--------------------------------------------------------------------------
| 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');

Ora puoi usare il codice che hai già nel tuo routes.php .

Per eliminare il tuo retail_db connessione, impostalo su null :

$config->set('database.connections.retail_db', null);