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
- Laravel 5 multipel databaseforbindelse FRA
laracasts.com - Forbind flere databaser i laravel FRA
tutsnare.com - Flere DB-forbindelser i Laravel FRA
fideloper.com