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