Database Manager
Laravel cần DatabaseManager để quản lý nhiều connection, hỗ trợ lazy load, cache connection, che giấu sự khác biệt giữa các driver, và cung cấp connection tương thích với Query Builder/Eloquent. Nếu DB Facade gọi thẳng Connection hoặc PDO thì sẽ mất hết các lợi ích này.
- DatabaseManager là service quản lý toàn bộ database connection trong Laravel.
- Được bind dưới dạng singleton, giúp:
- Lazy load connection khi cần.
- Cache connection để tái sử dụng trong suốt vòng đời request/process.
- Cung cấp connection cho Query Builder và Eloquent.
Tóm gọn DatabaseManager = ông quản lý database trong Laravel.
- Biết cấu hình tất cả DB.
- Mở kết nối khi cần (lazy load).
- Giữ connection suốt request/process (reuse).
- Trả connection cho Query Builder và Eloquent để query.
Ví dụ
// Lấy connection mặc định
$connection = DB::connection();
// Lấy connection khác (nếu config nhiều DB)
$pgConn = DB::connection('pgsql');
// Thực hiện query
$users = DB::table('users')->get();
| Thành phần | Vai trò | Ví dụ khi dùng |
|---|---|---|
| DB Facade | "Cửa ngõ" tĩnh để truy cập DatabaseManager (Facade pattern) | DB::table('users')->get() |
| DatabaseManager | Quản lý tất cả connection, lazy load & cache connection | DB::connection('mysql') |
| Connection | Đại diện cho 1 connection cụ thể (MySQL, PgSQL, SQLite...) | $conn = DB::connection(); $conn->select(...) |
| PDO | Lớp PHP gốc thực hiện truy vấn DB (Laravel bọc lại trong Connection) | $pdo = DB::connection()->getPdo(); |
DB Facade
│
▼
DatabaseManager (ông quản lý)
│ -> kiểm tra connection đã tồn tại chưa?
│ - chưa có: tạo connection (lazy load)
│ - có rồi: lấy từ cache
▼
Connection (ví dụ: MySqlConnection)
│
▼
PDO (PHP Data Object - thực thi SQL)
│
▼
Database Server (MySQL, PostgreSQL, SQLite...)