Di .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
Di 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'),
],
Catatan: Dalam mysql2
jika DB_username dan DB_password sama, maka Anda dapat menggunakan metion env('DB_USERNAME')
yang ada di .env
beberapa baris pertama.
Tentukan Koneksi
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
Untuk menentukan koneksi mana yang akan digunakan, cukup jalankan connection()
metode
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Pembuat Kueri
$users = DB::connection('mysql2')->select(...);
Fasih
Tetapkan $connection
variabel dalam model Anda
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Anda juga dapat menentukan koneksi saat runtime melalui setConnection
metode atau on
metode statis:
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;
}
}
Catatan Berhati-hatilah dalam mencoba membangun hubungan dengan tabel di seluruh basis data! Itu mungkin dilakukan, tetapi bisa disertai dengan beberapa peringatan dan tergantung pada basis data apa dan / atau pengaturan basis data yang Anda miliki.
Menggunakan Banyak Koneksi Database
Saat menggunakan beberapa koneksi, Anda dapat mengakses masing-masing connection
melalui metode koneksi pada DB
fasad. Yang name
diteruskan ke connection
metode harus sesuai dengan salah satu koneksi yang tercantum dalam config/database.php
file konfigurasi Anda :
$users = DB::connection('foo')->select(...);
Anda juga dapat mengakses instance PDO mentah yang mendasarinya menggunakan metode getPdo pada instance koneksi:
$pdo = DB::connection()->getPdo();
Tautan yang Berguna
- Laravel 5 beberapa koneksi basis data DARI
laracasts.com
- Hubungkan beberapa basis data dalam laravel FROM
tutsnare.com
- Banyak Koneksi DB di Laravel FROM
fideloper.com
class SomeModel extends Model {
dan juga memastikan Anda telah menghapus dapatkan nilai dari file env sepertienv('DB_DATABASE', 'name')
ketika Anda membuat array konfigurasi DB baru dalam file database.php seperti yang disebutkan @sbaDi Laravel 5.1, Anda menentukan koneksi:
Default, Laravel menggunakan koneksi default. Sederhana, bukan?
Baca lebih lanjut di sini: http://laravel.com/docs/5.1/database#accessing-connections
sumber
Sebenarnya,
DB::connection('name')->select(..)
tidak berfungsi untuk saya, karena 'nama' harus dalam tanda kutip ganda: "nama"Namun, kueri pemilihan dijalankan pada koneksi default saya. Masih berusaha mencari tahu, bagaimana meyakinkan Laravel untuk bekerja seperti yang dimaksudkan: mengubah koneksi.
Sunting: Saya menemukan jawabannya. Setelah debugging Laravels DatabaseManager ternyata database.php saya (file config) (di dalam $ this-> app) salah. Di bagian "koneksi", saya memiliki hal-hal seperti "database" dengan nilai yang saya salin. Dalam istilah yang jelas, bukan
Saya perlu menempatkan sesuatu seperti
karena semua koneksi terdaftar dengan nilai yang sama untuk database, nama pengguna, kata sandi, dll. yang tentu saja tidak masuk akal jika saya ingin mengakses setidaknya nama database lain
Karena itu, setiap kali saya ingin memilih sesuatu dari database lain, saya selalu berakhir di database default saya
sumber
Laravel memiliki dukungan bawaan untuk beberapa sistem basis data, Anda perlu memberikan detail koneksi dalam file config / database.php
Setelah Anda memiliki ini, Anda dapat membuat dua kelas model dasar untuk setiap koneksi dan menentukan nama koneksi dalam model-model tersebut
Anda dapat memperluas model ini untuk membuat lebih banyak model untuk tabel di setiap DB.
sumber