Cách sử dụng nhiều cơ sở dữ liệu trong Laravel
25th May 2023Để sử dụng nhiều cơ sở dữ liệu trong Laravel, bạn cần cấu hình các kết nối cơ sở dữ liệu trong tệp config/database.php
. Trong tệp này, bạn có thể định nghĩa các kết nối cơ sở dữ liệu khác nhau và cấu hình các thông số cho mỗi kết nối.
Mỗi kết nối cơ sở dữ liệu được định nghĩa trong một mảng, với tên kết nối là khóa của mảng. Ví dụ, để định nghĩa một kết nối cơ sở dữ liệu MySQL với tên kết nối là mysql
, bạn có thể sử dụng mã sau:
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ],
Trong đó, các thông số driver
, host
, port
, database
, username
, password
, charset
, collation
, prefix
, strict
và engine
được sử dụng để cấu hình kết nối cơ sở dữ liệu MySQL. Bạn có thể thay đổi các thông số này để cấu hình các kết nối cơ sở dữ liệu khác nhau.
Sau khi định nghĩa các kết nối cơ sở dữ liệu trong tệp database.php
, bạn có thể sử dụng phương thức connection
của lớp DB
để chuyển đổi giữa các kết nối cơ sở dữ liệu khác nhau khi thực hiện các câu lệnh truy vấn. Ví dụ, để lấy dữ liệu từ một bảng trong cơ sở dữ liệu mysql2
, bạn có thể sử dụng mã sau:
$users = DB::connection('mysql2')->table('users')->get();
Trong đó, mysql2
là tên kết nối cơ sở dữ liệu được định nghĩa trong tệp database.php
.
Ngoài ra, bạn cũng có thể sử dụng các biến môi trường trong tệp .env
để cấu hình các thông số cho các kết nối cơ sở dữ liệu. Ví dụ, để cấu hình thông số cho kết nối cơ sở dữ liệu MySQL với tên kết nối là mysql
, bạn có thể sử dụng các biến môi trường DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
và DB_PASSWORD
. Ví dụ:
DB_HOST=localhost DB_PORT=3306 DB_DATABASE=mydatabase DB_USERNAME=myusername DB_PASSWORD=mypassword
Sau đó, bạn có thể sử dụng các biến môi trường này trong tệp database.php
như sau:
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ],
Trong đó, các hàm env('DB_HOST', 'localhost')
, env('DB_PORT', '3306')
, env('DB_DATABASE', 'forge')
, env('DB_USERNAME', 'forge')
và env('DB_PASSWORD', '')
sử dụng các biến môi trường tương ứng để lấy các giá trị cấu hình. Nếu không có biến môi trường được định nghĩa, các giá trị mặc định localhost
, 3306
, forge
, forge
và ''
sẽ được sử dụng.
Ngoài ra, Laravel cũng hỗ trợ sử dụng nhiều kết nối cơ sở dữ liệu đồng thời bằng cách sử dụng các connection pools
. Khi sử dụng connection pools
, Laravel sẽ tự động quản lý các kết nối đến các cơ sở dữ liệu khác nhau và phân phối các truy vấn đến các kết nối khác nhau để tối ưu hiệu suất.
Để sử dụng connection pools
, bạn có thể sử dụng các lớp DB
và DBPool
của Laravel. Ví dụ, để lấy dữ liệu từ một bảng trong cơ sở dữ liệu mysql2
bằng cách sử dụng connection pools
, bạn có thể sử dụng mã sau:
$users = DBPool::connection('mysql2')->table('users')->get();
Tuy nhiên, việc sử dụng connection pools
có thể phức tạp hơn so với việc sử dụng các kết nối cơ sở dữ liệu đơn giản. Vì vậy, bạn cần thận trọng và tìm hiểu kỹ trước khi sử dụng tính năng này.
- 13 views
Add new comment