sql >> Database teknologi >  >> RDS >> Mysql

Sådan bruger du flere databaser i Laravel

Brug af .env>=5,0 (Testet den 5.5) (Virker på 8 )

I .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret

DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret

I config/database.php

'mysql' => [
    'driver'    => env('DB_CONNECTION'),
    'host'      => env('DB_HOST'),
    'port'      => env('DB_PORT'),
    'database'  => env('DB_DATABASE'),
    'username'  => env('DB_USERNAME'),
    'password'  => env('DB_PASSWORD'),
],

'mysql2' => [
    'driver'    => env('DB_CONNECTION_SECOND'),
    'host'      => env('DB_HOST_SECOND'),
    'port'      => env('DB_PORT_SECOND'),
    'database'  => env('DB_DATABASE_SECOND'),
    'username'  => env('DB_USERNAME_SECOND'),
    'password'  => env('DB_PASSWORD_SECOND'),
],

Bemærk: I mysql2 hvis DB_brugernavn og DB_password er det samme, kan du bruge env('DB_USERNAME') som er opført i .env første par linjer.

Uden .env <5,0

Definer forbindelser

app/config/database.php

return array(

    'default' => 'mysql',

    'connections' => array(

        # Primary/Default database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database1',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database2',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

Skema

For at angive, hvilken forbindelse der skal bruges, skal du blot køre connection() metode

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

Forespørgselsbygger

$users = DB::connection('mysql2')->select(...);

Veltalende

Indstil $connection variabel i din model

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

Du kan også definere forbindelsen under kørsel via setConnection metoden eller on statisk metode:

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql2'); // non-static method

        $something = $someModel->find(1);

        $something = SomeModel::on('mysql2')->find(1); // static method

        return $something;
    }

}

Bemærk Vær forsigtig med at forsøge at opbygge relationer med tabeller på tværs af databaser! Det er muligt at gøre, men det kan komme med nogle forbehold og afhænger af, hvilke database- og/eller databaseindstillinger du har.

Fra Laravel Docs

Brug af flere databaseforbindelser

Når du bruger flere forbindelser, kan du få adgang til hver connection via forbindelsesmetoden på DB facade. name videregivet til connection metoden skal svare til en af ​​de forbindelser, der er angivet i din config/database.php konfigurationsfil:

$users = DB::connection('foo')->select(...);

Du kan også få adgang til den rå, underliggende PDO-instans ved hjælp af getPdo-metoden på en forbindelsesforekomst:

$pdo = DB::connection()->getPdo();

Nyttige links

  1. Laravel 5 multipel databaseforbindelse FRA laracasts.com
  2. Forbind flere databaser i laravel FRA tutsnare.com
  3. Flere DB-forbindelser i Laravel FRA fideloper.com


  1. SQL-nøgler, MUL vs PRI vs UNI

  2. Sådan forbedres replikeringsydelsen i en MySQL eller MariaDB Galera Cluster

  3. Afgrænsere i MySQL

  4. PostgreSQL multi INSERT...RETURNERER med flere kolonner