[Laravel] Nên sử dụng Eloquent hay Query builder trong Laravel

Đăng bởi : Admin | Lượt xem : 2311 | Chuyên mục : Laravel

Có 2 kiểu truy vấn với database thường được dùng đó lá: Eloquent và Query builder. Có rất nhiều lập trình viên phân vân là không biết nên sử dụng cách nào đẻ truy vấn với database sao cho hiệu quả. Vì vậy hãy cùng vncoder.vn cùng tìm hiểu xem chúng khác nhau như thế nào và khi nào nên sử dụng Eloquent hay Query Builder

I. Giới thiệu:

Trong laravel, có 2 kiểu truy vấn với database thường được dùng đó lá: Eloquent và Query builder. Trong bài này chúng ta sẽ cùng tìm hiểu xem chúng khác nhau như thế nào và khi nào nên sử dụng Eloquent hay Query builder

II Định nghĩa

1, Eloquent: Eloquent được laravel cung cấp hỗ trợ lập trình viên thao tác với database một cách đơn giản, dễ hiểu và ngắn gọn.
2, Query builder: Query Builder cung cấp 1 giao diện thuận tiện và dễ dàng tạo và chạy những truy vấn từ database. Nó có thể được sử dụng để thực thi hầu hết những thao tác về database trong ứng dụng của bạn và làm việc với tất cả những database được hỗ trợ.

III Cách sử dụng

1, 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ụ:

Ví dụ sử dụng Eloquent

$news = News::all();

2, 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. ví dụ:

DB::table('news)->get();

Truy vấn này sẽ trả về 1 mảng hiệu quả, trong đó mỗi hiệu quả là 1 object StdClass của PHP. Bạn hoàn toàn có thể truy vấn vào giá trị mỗi cột như 1 thuộc tính của object .

IV So sánh

1, Tính Bảo mật: Query builder và Eloquent đều sử dụng : ‘PDO parameter binding’ nên sẽ giúp chúng ta tránh được lỗi sql injection.
2, Tính tương tác: Bạn có thể sử dụng tất cả các function của Query Builder trong Eloquent nhưng không thể sử dụng các funcation của Eloquent trong Query Builder.
3, Tính dễ sử dụng:

  • Eloquent có các hàm được laravel xây dựng sãn nên nó ngắn gọn và dễ hiểu hơn so với Query builder
  • Eloquent dễ dàng liên kết giữa các bảng trong database hơn Query builder
  • Eloquent chỉ thực hiện được những truy vấn không quá phức tạp, để thực hiện những truy vấn phức tạp cần dùng Query builder

4, Hiệu suất: Eloquent thực hiện các thao tác với database châmj hơn so với Query builder

V. Một số ví dụ về sử dụng Eloquent và Query builder

1, Lấy tất cả các bản ghỉ:
Query builder:

DB::table('news')->get();

Eloquent :

News::all();

2, Lấy số lượng các bản ghi:
Query builder:

DB::table('news')->count();

Eloquent :

News::count();

3, Tìm theo ID:
Query builder:

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

Eloquent :

News::find(1);

4, Lấy bản ghi theo trường nhất định:
Query builder:

DB::table('news')->where('status', 1)->first();

Eloquent :

News::where('status', 1)->first();

5, Insert:
Query builder:

DB::table('news')->insert(
    ['title' => 'Query builder and Eloquent']
);

Eloquent :

    $news = new News;
    $news->title = 'Query builder and Eloquent';
    $news->save();

Nếu sử dụng hàm create thì ta có 1 số cách viết như sau :

    $news = new News;
    $news->title = 'Query builder and Eloquent';
    $news->save();

hoặc

    News::firstOrCreate([
        'title' => 'Query builder and Eloquent'
    ]);

6, Update:
Query builder:

    DB::table('news')->where('id', 1)->update(['title' => 'Query builder and Eloquent update']);

Eloquent

    $news = News::find(1);
    $news->title = 'Query builder and Eloquent update';
    $news->save();

hoặc nếu dùng hàm update thì ta sử dụng :

    $news = News::find(1);
    $news->update([
        'title' => 'Query builder and Eloquent'
    ]);

7, Delete:
Query builder:

    DB::table('news')->where('id', '=', 1)->delete();

Eloquent :

    $news = News::find(1);
    $news->delete();

hoặc :

    News::destroy(1);

VI. Kết luận

  • Từ trên ta thấy, mỗi 1 loại query đều có ưu và nhược điểm khác nhau. Tùy vào mục đích sử dụng thì ta có thể lựa chọn loại query nào cho phù hợp.
  • Tuy nhiên, ở hệ thống cần tính bảo mật cao và cần xử lý data lớn thì nên dùng Query builder.

VII. Xem thêm