Laravel: come usare database multipli

di Lorenzo Neri

Ti stai chiedendo come usare database multipli nel tuo progetto fatto in Laravel? In questo articolo ti spiego come puoi fare!

Laravel è veramente potente: ti permette di dare vita a tante cose.

Può capitare in diverse occasioni, che desideri connettere e usare più di un database nel tuo progetto, da qua il discorso di “database multipli”.

Le motivazioni possono essere tante, in questo articolo ti vorrei mostrare due strade differenti.

Il motivo? Tutto dipende da “.env” e dalla versione che stai attualmente usando.

Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!

Usare database multipli con “.env” dalla versione 5 in su

Se nel tuo progetto stai usando “.env” con una versione superiore alla 5 inclusa, la strada che devi percorrere per usare database multipli è la seguente.

Come prima cosa, nel file stesso, imposta i database che vuoi impiegare con i loro dati relativi:

DB_CONNECTION_1=mysql_connection
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_1
DB_USERNAME=utente
DB_PASSWORD=password
DB_CONNECTION_2=mysql_connection
DB_HOST_2=localhost
DB_PORT_2=3306
DB_DATABASE=database_2
DB_USERNAME_2=utente2
DB_PASSWORD_2=password2

Lo preciso: questi sono dati di esempio e vanno configurati secondo le tue esigenze e il tuo progetto Laravel oltre che i tuoi database.

Cos’altro devi fare? Devi modificare il file “config/database.php” per dare vita a tutto:

'mysql' =>[ 
 'driver' => env('CONNECTION_1=mysql_connection'),
 'host' => env('HOST=localhost'),
 'port' => env('PORT=3306'),
 'database' => env('DATABASE=database_1'),
 'username' => env('USERNAME=utente'),
 'password' => env('PASSWORD=password')
 ],
'mysql2' =>[
    'driver' => env('CONNECTION_2=mysql_connection'),
    'host' => env('HOST=localhost'),
    'port' => env('PORT=3306'),
    'database' => env('DATABASE=database_2'),
    'username' => env('USERNAME=utente2'),
    'password' => env('PASSWORD=password2')
]

Quindi ecco in Laravel come usare database multipli ma con “.env” versione 5 o supreriore: andiamo oltre.

Come usare più di un database con “.env” inferiore alla versione 5

In questo secondo caso, dovrai definire il seguente contenuto nel file “app/config/database.php”:

return array (
    'default' => 'mysql',
    'connections' => array(
            'mysql' =>[ 
                'driver' => env('CONNECTION_1=mysql_connection'),
                'host' => env('HOST=localhost'),
                'port' => env('PORT=3306'),
                'database' => env('DATABASE=database_1'),
                'username' => env('USERNAME=utente'),
                'password' => env('PASSWORD=password')
                ],
                'mysql2' =>[
                    'driver' => env('CONNECTION_2=mysql_connection'),
                    'host' => env('HOST=localhost'),
                    'port' => env('PORT=3306'),
                    'database' => env('DATABASE=database_2'),
                    'username' => env('USERNAME=utente2'),
                    'password' => env('PASSWORD=password2')
                ]
    )
    
);

Semplice e pratico, quindi nel caso la tua verisone di “.env” sia inferiore alla 5 dovrai usare questa modifica nel codice di configurazione del tuo progetto.

Ma vediamo un’altra cosa molto importante prima di salutarci.

Come usare database multipli con QueryBuilder e schemi

Tutto molto bello, ma ritengo opportuno spiegarti anche come selezionare il database in questione all’interno di QueryBuilder ed eventuali schemi.

Per esempio:

$utenti = DB::connection('mysql2')->select("la tua query");

Nel caso di uno schema:

Schema::connection('mysql2')->create('tabella_da_creare', function($table)
{
    $table->increments('id'):
});

Ma prima ancora di salutarti e vedere al 100% in Laravel come usare database multipli…

Multiple databases con Eloquent

Nel caso di Eloquent che viene usato molto spesso all’interno del mondo Laravel puoi fare così:

class IlTuoNuovoModello extends Eloquent {
    protected $connection = 'mysql2';
}

Semplice ed immediato!

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più