Search code examples
phpeloquentlumen-5.5

How to use multiple DB connections using .env in Lumen 5.5..?


I have installed Lumen 5.5 and configured .env :

APP_ENV=local
APP_DEBUG=true
APP_KEY=2gh4RD89kWa87clEs6Vhjso3XhsFo3dR
APP_TIMEZONE=UTC

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=XXXXXX
DB_USERNAME=XXXXXX
DB_PASSWORD=XXXXXX

CACHE_DRIVER=memcached
QUEUE_DRIVER=sync

and created a model using Eloquent :

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Test extends Model {
    
    public $timestamps = false;
    protected $connection = 'foo';
}

Now there is no documention on the official site to configure multiple DB connection in .env file. My single connection is working perfectly fine but now I need to add another DB connection details.

What I have tried so far :

  1. Created db config file as app/config/database.php with multiple db details but my setup doesn't get affected whatever i write in that file. It's only using .env to get connection details.

  2. Tried to add multiple DB connection details in .env file like :

    DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=XXXXXX DB_USERNAME=XXXXXX DB_PASSWORD=XXXXXX

    FOO_DB_CONNECTION=mysql FOO_DB_HOST=127.0.0.1 FOO_DB_PORT=3306 FOO_DB_DATABASE=FOOXXXXXX FOO_DB_USERNAME=FOOXXXXXX FOO_DB_PASSWORD=FOOXXXXXX

    DB_CONNECTION_FOO=mysql DB_HOST_FOO=127.0.0.1 DB_PORT_FOO=3306 DB_DATABASE_FOO=FOOXXXXXX DB_USERNAME_FOO=FOOXXXXXX DB_PASSWORD_FOO=FOOXXXXXX

But it just keep giving me this error :

(1/1) InvalidArgumentException
Database [foo] not configured.

I have tried everything I found on Google.


Solution

  • The way I configured in my project (it is in Lumen 5.4) is as below:

    in the config/database.php

    'pgsql' => [
            'driver'   => 'pgsql',
            'host'     => env('DB_HOST', 'db'),
            'port'     => env('DB_PORT', 5432),
            'database' => env('DB_DATABASE', 'service_db'),
            'username' => env('DB_USERNAME', 'service_user'),
            'password' => env('DB_PASSWORD'),
            'charset'  => env('DB_CHARSET', 'utf8'),
            'prefix'   => env('DB_PREFIX', ''),
            'schema'   => env('DB_SCHEMA', 'public'),
        ],
    
        'pgsql2' => [
            'driver'   => 'pgsql',
            'host'     => env('DB_HOST2', 'db'),
            'port'     => env('DB_PORT', 5432),
            'database' => env('DB_DATABASE2', 'service_db'),
            'username' => env('DB_USERNAME2', 'service_user'),
            'password' => env('DB_PASSWORD2'),
            'charset'  => env('DB_CHARSET', 'utf8'),
            'prefix'   => env('DB_PREFIX', ''),
            'schema'   => env('DB_SCHEMA2', 'public'),
        ],
    

    I have created 2 connections with 2 different names and each connection points to a different env variable for db host/database/username/password/schema. If this doesn't help, post your database.php file.