ORM, Query Builder Laravel

ORM và querybuilder:

Query builder cung cấp các phương thức thuận tiện truy vấn DB . nhưn thay vì query như bình thường là
vd : where id = 1 thì querybuilder sẽ không truyền trực tiếp : mà truyền qua param tránh trường hợp bị sql injection : vd : where id = ? (giá trị truyền vào sẽ đc validate và truyền vào vị trí ? )

ORM (eloquent ORM ) đi kèm với laravel

  • Cũng dùng để làm việc với DB như query builder nhưng nó đơn giản hơn và dễ sử dụng hơn
  • Mỗi table trong DB sẽ được ánh xạ 1 : 1 với 1 model

2 cách đều có khả năng phòng chống sql injection nhưng check trên các trang web thì thấy ORM bảo mật tốt hơn => khuyên dung ORM

-Một khó khăn trong việc sử dụng ORM so với querybuilder là nếu SQL phức tạp mà ORM không đáp ứng được thì ta phải sử dụng DB:raw hoặc query builder
DB Raw Query DB::raw() thường sử dụng select còn lại thì hạn chế
->select(DB::raw('count(id) as email_count'), 'email')

  • Hiệu suất :

Querybuilder truy vấn nhanh hơn  ORM vì :

  • ORM phải thêm lớp trong ứng dùng và cần nhiều truy vấn SQL

Nhưng vẫn cần thiết dùng ORM vì

  • Tạo mối quan hệ rõ ràng và rành mạch, cú pháp đơn giản
  • Trong trường hợp thay đổi DB thì ORM sẽ cập nhật dễ dàng hơn.

vd :
Query builder :
$users = DB::table('users')->get();
ORM :
$users = User::all();
Hoặc ta có thể kết hợp ORM và query builder:
$user = User::where('id',1)->get();

ref :
https://viblo.asia/p/so-sanh-giua-eloquent-orm-va-querybuilder-trong-laravel-maGK7MG9lj2