Trong .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
Trong 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'),
],
Lưu ý: Trong trường mysql2
hợp DB_username và DB_password giống nhau, thì bạn có thể sử dụng env('DB_USERNAME')
được đánh giá trong .env
vài dòng đầu tiên.
Xác định kết nối
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' => '',
),
),
);
Lược đồ
Để chỉ định sử dụng kết nối nào, chỉ cần chạy connection()
phương thức
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Trình tạo truy vấn
$users = DB::connection('mysql2')->select(...);
Hiệu quả
Đặt $connection
biến trong mô hình của bạn
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Bạn cũng có thể xác định kết nối trong thời gian chạy thông qua setConnection
phương thức hoặc on
phương thức tĩnh:
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;
}
}
Lưu ý Hãy cẩn thận về việc cố gắng xây dựng mối quan hệ với các bảng trên cơ sở dữ liệu! Có thể làm được, nhưng nó có thể đi kèm với một số cảnh báo và phụ thuộc vào cơ sở dữ liệu và / hoặc cài đặt cơ sở dữ liệu nào bạn có.
Sử dụng nhiều kết nối cơ sở dữ liệu
Khi sử dụng nhiều kết nối, bạn có thể truy cập từng connection
kết nối thông qua phương thức kết nối trên DB
mặt tiền. Truyền name
cho connection
phương thức phải tương ứng với một trong các kết nối được liệt kê trong config/database.php
tệp cấu hình của bạn :
$users = DB::connection('foo')->select(...);
Bạn cũng có thể truy cập vào thể hiện PDO thô, cơ bản bằng cách sử dụng phương thức getPdo trên một thể hiện kết nối:
$pdo = DB::connection()->getPdo();
Liên kết hữu ích
- Kết nối nhiều cơ sở dữ liệu của Laravel 5 TỪ
laracasts.com
- Kết nối nhiều cơ sở dữ liệu trong laravel TỪ
tutsnare.com
- Nhiều kết nối DB trong Laravel TỪ
fideloper.com
class SomeModel extends Model {
và cũng đảm bảo rằng bạn đã xóa các giá trị từ tệp env nhưenv('DB_DATABASE', 'name')
khi bạn tạo mảng cấu hình DB mới trong tệp cơ sở dữ liệu như @sba đã đề cập