sql >> Base de Datos >  >> RDS >> PostgreSQL

Lumen:crea una conexión de base de datos en tiempo de ejecución

Hay un problema principal con el método que está buscando:

No inicializaste ningún objeto de configuración. Lumen de forma predeterminada no tiene un conjunto de objetos de configuración tradicional, hasta que cree un config directorio en su carpeta raíz.

Como está escrito en los documentos de configuración de Lumen:

Todas las opciones de configuración para el marco Lumen se almacenan en el archivo .env.

El enfoque que está buscando requiere el objeto de configuración tradicional como se usa en Laravel.

Para obtener ese objeto y su nuevo retail_db conexión de base de datos funcionando:

  • Crea una config carpeta en la raíz de su proyecto
  • Copie el archivo vendor/laravel/lumen-framework/config/database.php a esta carpeta de configuración
  • Inicialice el objeto de configuración de la base de datos en su bootstrap/app.php con $app->configure('database'); (póngalo en la línea 28)

Su estructura de carpetas se ve así ahora:

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

Por supuesto, puede eliminar las conexiones que no necesita de la matriz de conexiones en app/config/database.php comentándolos o eliminándolos por completo.

aplicación/config/base de datos.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),
        ],
]

Tu bootstrap/app.php con los cambios:

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

Ahora puedes usar el código que ya tienes en tu routes.php .

Para eliminar su retail_db conexión, simplemente configúrelo en null :

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