Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verwenden Sie mehrere Datenbanken in Laravel

Verwendung von .env>=5,0 (Getestet auf 5.5) (Funktioniert auf 8 )

In .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

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

Hinweis: In mysql2 Wenn DB_username und DB_password identisch sind, können Sie env('DB_USERNAME') verwenden was in .env erwähnt wird ersten Zeilen.

Ohne .env <5.0

Verbindungen definieren

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'    => '',
        ),
    ),
);

Schema

Um anzugeben, welche Verbindung verwendet werden soll, führen Sie einfach connection() aus Methode

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

Abfragegenerator

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

Eloquent

Setzen Sie die $connection Variable in Ihrem Modell

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

Sie können die Verbindung auch zur Laufzeit über setConnection definieren Methode oder die on statische Methode:

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;
    }

}

Hinweis Seien Sie vorsichtig, wenn Sie versuchen, Beziehungen zu Tabellen über Datenbanken hinweg aufzubauen! Es ist möglich, aber es kann mit einigen Vorbehalten verbunden sein und hängt davon ab, welche Datenbank und/oder Datenbankeinstellungen Sie haben.

Von Laravel Docs

Mehrere Datenbankverbindungen verwenden

Wenn Sie mehrere Verbindungen verwenden, können Sie auf jede connection zugreifen über die Verbindungsmethode auf der DB Fassade. Der name an die connection übergeben -Methode sollte einer der in Ihrer config/database.php aufgelisteten Verbindungen entsprechen Konfigurationsdatei:

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

Sie können auch auf die rohe, zugrunde liegende PDO-Instanz zugreifen, indem Sie die getPdo-Methode auf einer Verbindungsinstanz verwenden:

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

Nützliche Links

  1. Laravel 5 multiple database connection FROM laracasts.com
  2. Verbinden Sie mehrere Datenbanken in Laravel VON tutsnare.com
  3. Mehrere DB-Verbindungen in Laravel VON fideloper.com