PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Lumen - Utwórz połączenie z bazą danych w czasie wykonywania

Jest jeden główny problem z metodą, do której się wybierasz:

Nie zainicjowałeś żadnego obiektu konfiguracyjnego. Lumen domyślnie nie ma ustawionego tradycyjnego obiektu konfiguracyjnego, dopóki nie utworzysz config w katalogu głównym.

Jak napisano w dokumentacji konfiguracyjnej Lumen:

Wszystkie opcje konfiguracyjne dla struktury Lumen są przechowywane w pliku .env.

Podejście, do którego dążysz, wymaga tradycyjnego obiektu konfiguracyjnego używanego w Laravel.

Aby uzyskać ten obiekt i swoją nową bazę danych retail_db połączenie z bazą danych działa:

  • Utwórz config folder w katalogu głównym projektu
  • Skopiuj plik vendor/laravel/lumen-framework/config/database.php do tego folderu konfiguracyjnego
  • Zainicjuj obiekt konfiguracji bazy danych w swoim bootstrap/app.php z $app->configure('database'); (umieść to w linii 28)

Twoja struktura folderów wygląda teraz tak:

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

Oczywiście możesz usunąć te połączenia, których nie potrzebujesz, z tablicy połączeń w app/config/database.php komentując je lub całkowicie je usuwając.

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

Twój bootstrap/app.php ze zmianami:

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

Teraz możesz użyć kodu, który już masz w swoim routes.php .

Aby usunąć swoją retail_db połączenie, po prostu ustaw je na null :

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA Nazwy tabel pisane wielkimi literami

  2. pgFincore 1.2, rozszerzenie PostgreSQL

  3. Optymalizacja zapytań w PostgreSQL. WYJAŚNIJ podstawy – część 2

  4. Zarządzanie i automatyzacja PostgreSQL z ClusterControl

  5. Konfigurowanie PostgreSQL pod kątem obserwowalności