5 NHÓM CÔNG CỤ CỐT LÕI CỦA \DB:: FACADE TRONG LARAVEL
khi làm việc với Laravel, nếu Eloquent ORM mang lại sự tiện lợi và trừu tượng hóa cao, thì \DB:: Facade lại chính là "vũ khí hạng nặng" giúp bạn nắm trọn quyền kiểm soát trực tiếp tầng cơ sở dữ liệu (Database Layer) với hiệu năng tối ưu nhất.
Dưới đây là bài viết mổ xẻ chi tiết 5 nhóm phương thức cốt lõi của \DB:: Facade trong Laravel.
1. Nhóm Chạy Truy Vấn Raw (Raw Queries)
Khi bạn cần viết các câu lệnh SQL thuần túy vì lý do hiệu năng, hoặc vì câu truy vấn quá phức tạp mà Query Builder không thể biểu diễn gọn gàng, nhóm Raw Queries sẽ ra tay:
\DB::select(...): Thực thi câu lệnh SELECT nguyên bản, trả về một mảng chứa kết quả (dạngstdClass).\DB::insert(...): Chạy câu lệnh INSERT thô vào bảng.\DB::update(...): Thực thi câu lệnh UPDATE dữ liệu trực tiếp.\DB::delete(...): Chạy câu lệnh DELETE xóa bản ghi.\DB::statement(...): Dùng cho các câu lệnh quản trị cấu trúc cơ sở dữ liệu DDL (nhưDROP TABLE,ALTER TABLE,TRUNCATE).\DB::raw(...): "Vũ khí bí mật" dùng để chèn các biểu thức SQL thô (ví dụ hàm toán học, hàm thời gian) vào bên trong Query Builder mà không bị Laravel tự động escape.
2. Nhóm Query Builder (Dựng Câu Lệnh Fluent)
Đây là nhóm phương thức được sử dụng dày đặc nhất hàng ngày, cho phép bạn viết câu lệnh SQL bằng cú pháp hướng đối tượng mượt mà, trực quan và an toàn tuyệt đối trước lỗi SQL Injection:
\DB::table('table_name'): Điểm xuất phát của mọi câu lệnh Query Builder. Nó khởi tạo một đối tượng truy vấn gắn liền với bảng chỉ định, cho phép bạn nối tiếp hàng loạt các hàm nhưselect(),where(),join(),groupBy(),orderBy(), v.v.
3. Nhóm Quản Lý Transaction (Giao Dịch CSDL)
Đảm bảo tính toàn vẹn dữ liệu (ACID) là tối quan trọng trong các hệ thống tài chính, đặt hàng hay thanh toán. Nhóm này giúp bạn thực hiện các thao tác: Tất cả cùng thành công, hoặc nếu có một lỗi nhỏ xảy ra, mọi thay đổi sẽ được hủy bỏ hoàn toàn (rollback).
\DB::transaction(function () { ... }): Cách hiện đại và an toàn nhất. Laravel sẽ tự động bắt đầu transaction, chạy đoạn code bên trong closure, tự động commit nếu thành công hoặc tự động rollBack ngay lập tức nếu có bất kỳ Exception nào văng ra.\DB::beginTransaction(),\DB::commit(),\DB::rollBack(): Bộ ba kiểm soát thủ công dành cho các kịch bản logic phức tạp, đòi hỏi bạn tự chủ động quản lý thời điểm đóng/mở giao dịch.
4. Nhóm Kết Nối Và Cấu Hình (Connection Management)
Trong các ứng dụng enterprise lớn, việc kết nối tới nhiều cơ sở dữ liệu cùng lúc (ví dụ vừa đọc từ Database chính, vừa ghi báo cáo sang Database phụ hoặc database của một dịch vụ khác) là chuyện bình thường.
\DB::connection('name'): Cho phép chuyển đổi nhanh sang một kết nối cơ sở dữ liệu khác đã được cấu hình trong fileconfig/database.php(ví dụ:\DB::connection('mysql_reports')->table(...)).\DB::reconnect()và\DB::disconnect(): Chủ động ngắt hoặc thiết lập lại kết nối với database, cực kỳ hữu ích trong các tiến trình chạy ngầm dài hạn (Daemon Queue Workers) để tránh lỗi mất kết nối (MySQL server has gone away).
5. Nhóm Lắng Nghe & Debug (Logging & Events)
Khi bạn cần tối ưu hóa câu lệnh SQL hoặc muốn điều tra xem hệ thống vừa sinh ra những câu truy vấn nào dưới tầng database, đây là những công cụ không thể thiếu:
\DB::listen(function ($query) { ... }): Lắng nghe mọi câu lệnh SQL vừa được thực thi trên toàn hệ thống. Bên trong closure, bạn có thể lấy ra$query->sql,$query->bindings(các tham số truyền vào) và$query->time(thời gian chạy tính bằng mili-giây) để log lại phục vụ việc tối ưu.\DB::enableQueryLog()và\DB::getQueryLog(): Bật chế độ ghi log truy vấn tạm thời và lấy ra toàn bộ lịch sử các câu SQL đã chạy trong request hiện tại, rất hay dùng khi viết Unit Test hoặc debug nhanh tại chỗ.
💡 Lời Kết
Hiểu rõ và sử dụng thành thạo 5 nhóm phương thức của \DB:: Facade sẽ giúp bạn linh hoạt xử lý từ những bài toán truy vấn phức tạp, tối ưu hiệu năng đến việc đảm bảo an toàn giao dịch dữ liệu trong mọi dự án Laravel.
All rights reserved