Använda .env
>=5.0
(Testat den 5.5) (Fungerar 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'),
],
Obs! I
mysql2
om DB_username och DB_password är samma, kan du användaenv('DB_USERNAME')
som anges i.env
första raderna.
Utan .env
<5.0
Definiera anslutningar
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
För att ange vilken anslutning som ska användas, kör bara connection()
metod
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Frågebyggaren
$users = DB::connection('mysql2')->select(...);
Vältalande
Ställ in $connection
variabel i din modell
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Du kan också definiera anslutningen under körning via setConnection
metoden eller on
statisk metod:
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;
}
}
Obs Var försiktig med att försöka bygga relationer med tabeller över databaser! Det är möjligt att göra, men det kan komma med vissa varningar och beror på vilka databas- och/eller databasinställningar du har.
Från Laravel Docs
Använda flera databasanslutningar
När du använder flera anslutningar kan du komma åt varje connection
via anslutningsmetoden på DB
Fasad. name
skickas till connection
metod bör motsvara en av anslutningarna som anges i din config/database.php
konfigurationsfil:
$users = DB::connection('foo')->select(...);
Du kan också komma åt den råa, underliggande PDO-instansen med getPdo-metoden på en anslutningsinstans:
$pdo = DB::connection()->getPdo();
Användbara länkar
- Laravel 5 multipel databasanslutning FRÅN
laracasts.com
- Anslut flera databaser i laravel FRÅN
tutsnare.com
- Flera DB-anslutningar i Laravel FRÅN
fideloper.com