Xin chào anh em, mình thấy vì một số mục đích khác nhau có nhiều anh em cần kết nội nhiều databse trong một project laravel. Hôm nay mình sẽ hướng dẫn anh em.
Tiến hành sửa file app / config / database.php
. Anh em có thể lựa chọn kết nối với nhiều loại databse ở đây mình sẽ ví dụ 2 databse Mysql
<?php
return array(
'default' => 'mysql',
'connections' => array(
# Kết nối databse chính
'mysql' => array(
'driver' => 'mysql',
'host' => 'host1',
'database' => 'database1',
'username' => 'user1',
'password' => 'pass1'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Database phụ thứ 2
'mysql2' => array(
'driver' => 'mysql',
'host' => 'host2',
'database' => 'database2',
'username' => 'user2',
'password' => 'pass2'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
Vậy là anh em đã thiết lập một kết nối tới database phụ thứ 2 bây giờ làm thế nào để sử dụng nó trong code ?
Có một số cách sau :
Trong Schema Builder, bạn có thể sử dụng Schema facade với bất kỳ kết nối nào. Để chỉ định kết nối để sử dụng, chỉ cần chạy phương thức connection ():
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Tương tự như Schema Builder, bạn có thể định nghĩa một kết nối trên Query Builder:
$users = DB::connection('mysql2')->select(...);
Bạn cũng có thể xác định những kết nối để sử dụng trong các model Eloquent của bạn
Một cách là thiết lập biến $connection trong model của bạn:
<?php
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Bạn cũng có thể định nghĩa kết nối tại thời gian chạy thông qua phương thức setConnection.
<?php
class SomeController extends BaseController {
public function someMethod()
{
$someModel = new SomeModel;
$someModel->setConnection('mysql2');
$something = $someModel->find(1);
return $something;
}
}
Unpublished comment
Viết câu trả lời