Cách sử dụng nhiều cơ sở dữ liệu trong Laravel

25th May 2023
Cách sử dụng nhiều cơ sở dữ liệu trong Laravel
Table of contents

Để 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ố driverhostportdatabaseusernamepasswordcharsetcollationprefixstrict 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_HOSTDB_PORTDB_DATABASEDB_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 localhost3306forgeforge 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.

Bạn thấy bài viết này như thế nào?
0 reactions

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Eager Loading là một kỹ thuật tối ưu hóa truy vấn cơ sở dữ liệu trong Laravel, giúp tăng tốc độ truy vấn và giảm số lượng truy vấn cần thiết để lấy dữ liệu liên quan đến một bản ghi.

Để sử dụng Eager Loading với điều kiện trong Laravel, bạn có thể sử dụng phương thức whereHas hoặc orWhereHas trong Eloquent Builder.

E hiểu đơn giản vầy nha. auth() hay Auth trong laravel là những function global hay class, nó cũng chỉ là 1 thôi

Xin chào các bạn, tuần này mình sẽ viết một bài về cách xử lý Real Time(thời gian thực) với Laravel và Pusher

Laravel cũng đi kèm với một số sản phẩm phụ tính phí như Forge, Envoyer, Spark. Tất nhiên, Taylor cũng phải kiếm tiền