Usare connessioni multiple in Laravel

Mattepuffo's logo
Usare connessioni multiple in Laravel

Usare connessioni multiple in Laravel

In un progetto che sto sviluppando con Laravel ho la necessità di connettermi ad un database secondario.

Nel mio caso si tratta sempre di un db MySQL/MariaDB.

Le operazioni da fare per usare un'altra connessione sono poche.

Cominciamo dal file .env:

DB_CONNECTION=mysql
DB_HOST=DB_HOST
DB_PORT=3306
DB_DATABASE=DB_NOME
DB_USERNAME=DB_USER
DB_PASSWORD=DB_PWD

DB_CONNECTION_QPS=mysql
DB_HOST_QPS=DB_QPS_HOST
DB_PORT_QPS=3306
DB_DATABASE_QPS=DB_QPS_NOME
DB_USERNAME_QPS=DB_QPS_USER
DB_PASSWORD_QPS=DB_QPS_PWD

Fatto questo dobbiamo aggiungere la connessione anche nel file config/database.php:

'connections' => [

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'mysql_qps' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST_QPS', '127.0.0.1'),
            'port' => env('DB_PORT_QPS', '3306'),
            'database' => env('DB_DATABASE_QPS', 'forge'),
            'username' => env('DB_USERNAME_QPS', 'forge'),
            'password' => env('DB_PASSWORD_QPS', ''),
        ],
,

    ],

Gli abbiamo assegnato un altro nome e richiamato le voci messe nel file precedente.

A questo punto nel controller avremo una cosa del genere:

class QpsController extends Controller {

    public function getProdottoByCodice($codice) {
        $query = "SELECT * FROM articoli";
        $data = DB::connection('mysql_qps')->select($query);
        return response()->json(
            array("data" => $data)
        );
    }

}

Come vedete abbiamo richiamato il nome della connessione nel metodo connection; in tutti gli altri casi, cioè quando interrogate il db principale, non avete bisogno di richiamare nulla.

Laravel ci penserà da solo a impostare la prima connessione come quella principale.

Enjoy!


Condividi su Facebook

Commentami!