PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Lumen - Créer une connexion à la base de données lors de l'exécution

Il y a un problème principal avec la méthode que vous choisissez :

Vous n'avez initialisé aucun objet de configuration. Par défaut, Lumen n'a pas d'ensemble d'objets de configuration traditionnels, jusqu'à ce que vous créiez une config répertoire dans votre dossier racine.

Comme écrit dans la documentation de configuration de Lumen :

Toutes les options de configuration du framework Lumen sont stockées dans le fichier .env.

L'approche que vous recherchez nécessite l'objet de configuration traditionnel tel qu'utilisé dans Laravel.

Pour obtenir cet objet et votre nouveau retail_db la connexion à la base de données fonctionne :

  • Créer une config dossier à la racine de votre projet
  • Copiez le fichier vendor/laravel/lumen-framework/config/database.php dans ce dossier de configuration
  • Initialisez l'objet de configuration de la base de données dans votre bootstrap/app.php avec $app->configure('database'); (mettez-le à la ligne 28)

La structure de vos dossiers ressemble maintenant à ceci :

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

Bien sûr, vous pouvez supprimer les connexions dont vous n'avez pas besoin du tableau des connexions dans app/config/database.php en les commentant ou en les supprimant complètement.

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

Votre bootstrap/app.php avec les modifications :

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

Vous pouvez maintenant utiliser le code que vous avez déjà dans votre routes.php .

Pour supprimer votre retail_db connexion, réglez-le simplement sur null :

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