W .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
W 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'),
],
Uwaga: W mysql2
przypadku, gdy DB_username i DB_password są takie same, możesz użyć, env('DB_USERNAME')
które jest wymienione w .env
pierwszych kilku wierszach.
Zdefiniuj połączenia
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' => '',
),
),
);
Schemat
Aby określić, którego połączenia użyć, po prostu uruchom connection()
metodę
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Kreator zapytań
$users = DB::connection('mysql2')->select(...);
Wymowny
Ustaw $connection
zmienną w swoim modelu
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Możesz także zdefiniować połączenie w czasie wykonywania za pomocą setConnection
metody lub on
metody statycznej:
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;
}
}
Uwaga Uważaj na próby zbudowania relacji z tabelami w różnych bazach danych! Jest to możliwe, ale może zawierać pewne zastrzeżenia i zależy od posiadanej bazy danych i / lub ustawień bazy danych.
Korzystanie z wielu połączeń z bazą danych
Korzystając z wielu połączeń, możesz uzyskać do nich dostęp connection
za pomocą metody połączenia na DB
elewacji. name
Przekazany do connection
metody powinny odpowiadać jednej z połączeń wymienionych w config/database.php
pliku konfiguracyjnym:
$users = DB::connection('foo')->select(...);
Możesz również uzyskać dostęp do pierwotnej, podstawowej instancji PDO, używając metody getPdo w instancji połączenia:
$pdo = DB::connection()->getPdo();
Przydatne linki
- Połączenie wielu baz danych Laravel 5 z
laracasts.com
- Połącz wiele baz danych w laravel FROM
tutsnare.com
- Wiele połączeń DB w Laravel FROM
fideloper.com
class SomeModel extends Model {
a także upewnić się, że usunąłeś wartości get z pliku env, tak jakenv('DB_DATABASE', 'name')
podczas tworzenia nowej tablicy konfiguracji DB w pliku database.php, jak wspomniałaW Laravel 5.1 określasz połączenie:
Domyślnie Laravel używa domyślnego połączenia. To proste, prawda?
Przeczytaj więcej tutaj: http://laravel.com/docs/5.1/database#accessing-connections
źródło
Właściwie to
DB::connection('name')->select(..)
nie działa dla mnie, ponieważ „nazwa” musi być w podwójnym cudzysłowie: „nazwa”Mimo to wybrane zapytanie jest wykonywane na moim domyślnym połączeniu. Wciąż próbuję dowiedzieć się, jak przekonać Laravela, aby działał zgodnie z przeznaczeniem: zmień połączenie.
Edycja: Zrozumiałem. Po debugowaniu menedżera bazy danych Laravels okazało się, że moja baza danych.php (plik konfiguracyjny) (wewnątrz $ this-> app) była błędna. W sekcji „połączenia” miałem takie rzeczy jak „baza danych” z wartościami tego, z którego je skopiowałem. Mówiąc wprost, zamiast
Musiałem umieścić coś takiego
ponieważ wszystkie połączenia zostały wymienione z tymi samymi wartościami dla bazy danych, nazwy użytkownika, hasła itp., co oczywiście nie ma sensu, jeśli chcę uzyskać dostęp do co najmniej innej nazwy bazy danych
Dlatego za każdym razem, gdy chciałem wybrać coś z innej bazy danych, zawsze kończyłem w mojej domyślnej bazie danych
źródło
Laravel ma wbudowaną obsługę wielu systemów baz danych, musisz podać szczegóły połączenia w pliku config / database.php
Gdy to zrobisz, możesz utworzyć dwie klasy modelu podstawowego dla każdego połączenia i zdefiniować nazwę połączenia w tych modelach
Możesz rozszerzyć te modele, aby utworzyć więcej modeli dla tabel w każdym DB.
źródło