Thảo luận về query builder và eloquent.

Query Builder là gì?

  • Là 1 kiểu truy vấn dữ liệu, 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 -> không cần lo lắng xử lý dữ liệu trước.

Eloquent ORM là gì ?

  • Object Relative Mapper - 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ị CSDL -> đối tượng đang định nghĩa trong các class.
  • Hiểu một cách đơn giản nhất, với ORM thì một Model sẽ đại diện cho một table trong DB, và ORM sẽ cung cấp các kĩ thuật giúp tương tác với các bản ghi trong table một cách dễ dàng nhất.

Cách sử dụng

  1. Query Builder
  • Query Builder xây dựng lớp DB để thực hiện các câu truy vấn
  • Cú pháp: $users = DB::table('users')->get();Truy vấn này sẽ trả về 1 mảng kết quả, 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.

2.  Eloquent ORM

  • Do mỗi bảng của database tương ứng với 1 model nên ta cần tạo Eloquent model trong thư mục app
  • Ví dụ: $users = User::all();

Kết quả trả về là 1 eloquent collections, trong đó mỗi kết quả là 1 User object.

Một số lệnh truy vấn cơ bản


Query Builder

Eloquent ORM

lấy tất cả bản ghi

DB::table('users')->get()

User::all()

Lấy bản ghi theo id

DB::table('users')->where('id', 1)->first()

User::find(1)

Aggregates

DB::table('users')->count()

User::count()

Insert

DB::table('users')->insert(

    ['email'  =>  'jonny@gmail.com']

);

User::create(['email' => 'jonny@gmail.com']);

So sánh


Truy vấn của Eloquent ORM sẽ trả về kết quả là 1 Model object.

Truy vấn của Query Builder sẽ trả về 1 object StdClass của PHP.

  • Tính dễ sử dụng:  Eloquent ORM là ngắn gọn, dễ hiểu và dễ sử dụng hơn, 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
  • Hiệu suất: QueryBuilder có hiệu suất truy vấn dữ liệu nhanh hơn khi csdl có nhiều bản ghi 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
  • Tính tương tác:  thể sử dụng tất cả các function của Query Builder trong Eloquent. không thể sử dụng các function của Eloquent trong Query Builder.Tính bảo mật: Eloquent ORM có tính bảo mật cao hơn Query Builder trong việc phòng chống SQL Injection.

Tài liệu tham khảo

https://viblo.asia/p/eloquent-orm-va-query-builder-khac-nhau-nhu-the-nao-maGK70XOZj2

https://laravel.com/docs/5.0/eloquent

https://laravel.com/docs/10.x/queries