So sánh query builder và ORM
Trong laravel, có 2 kiểu truy vấn với database thường được dùng đó lá: Eloquent và Query builder. Nó khác nhau như thế nào chúng ta cùng tìm hiểu nhé.
Giới thiệu
- Query Builder
-
Trong Laravel, Query Builder cung cấp giao diện để chạy các truy vấn CSDL. Nó có thể được sử dụng để thực hiện tất cả, từ kết nối DB cơ bản, CRUD, aggregates...
-
Query Builder sử dụng PDO (PHP Data Object, hệ thống API có sẵn của PHP để kết nối đến các CSDL thông dụng), bản thân API PDO đã bảo vệ chúng ta trước các tấn công SQL Injection, do đó khi xử dụng Query Builder không cần lo lắng xử lý dữ liệu trước khi chèn vào database
- Eloquent ORM
-
ORM (Object Relative Mapper) là 1 kỹ thuật lập trình giúp ánh xạ các bản ghi dữ liệu trong hệ quản trị cơ sở dữ liệu sang dạng đối tượng đang định nghĩa trong các class .
-
Eloquent ORM cho phép chúng ta có thể thao tác với các đối tượng DB và quan hệ tương ứng. Nó tương tự như làm việc với các đối tượng trong PHP. Ở đây, chính là tương tác thông qua "Model". Trong model sẽ định nghĩa table được truy vấn.
Cách sử dụng
- Query Builder
- Query Builder xây dựng lớp DB để thực hiện các câu truy vấn. Do đó, để bắt đầu 1 Query Builder, ta sử dụng hàm table() trong DB facade.
- Truy vấn này sẽ trả về 1 mảng kết quả, trong đó mỗi kết quả là 1 object StdClass của PHP. Bạn có thể truy cập vào giá trị mỗi cột như 1 thuộc tính của object.
- Bạn có thể truy cập giá trị của từng cột bằng cách truy cập cột đó như một thuộc tính của đối tượng
- Eloquent:
- Trong Eloquent mỗi bảng trong database phải ứng với 1 model. Lưu ý là mỗi Eloquent model này đều phải extend Illuminate\Database\Eloquent\Model class
Ví dụ:
So sánh
- Tính dễ sử dụng
- Các câu lệnh của Eloquent ORM là ngắn gọn, dễ hiểu và dễ sử dụng hơn so với các câu lệnh khá dài dòng của Query Builder.
- Hơn nữa, sử dụng Eloquent ORM cũng dễ dàng hơn trong việc kết nối giữa các bảng với nhau.
- Tuy nhiên, với 1 số truy vấn phức tạp, không sử dụng được Eloquent ORM thì vẫn cần sử dụng Query Builder để cho kết qủa chính xác nhất.
- Hiệu suất
- QueryBuilder có hiệu suất truy vấn dữ liệu nhanh hơn Eloquent ORM bởi vì Eloquent phải thêm một lớp trong ứng dụng và yêu cầu nhiều truy vấn SQL. Đối với các database mà có ít bản ghi hiệu suất của chúng không có quá là nhiều sự chênh lệch, vậy nên đối với những database này mình khuyên các bạn nên sử dụng Eloquent ORM vì cú pháp đơn giản và ngắn gọn của chúng.
- Tính bảo mật
Eloquent ORM có tính bảo mật cao hơn QueryBuilder trong việc phòng chống SQL Injection.
Kết luận
Đối với những truy vẫn đơn giản chúng ta nên sử dụng ORM vì nó ngắn gọn, dễ hiểu. Đối với nhưng query phức tạp, liên qua tới nhiều bảng, có dữ liệu lớn thì ưu tiên dùng query builder