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

Đăng bởi: Admin | Lượt xem: 3055 | 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ụ:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class News extends Model
{
    //
    protected $table = 'news';
    protected $guarded = ['id'];

}

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 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.

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

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Laravel

Xây dựng ứng dụng với Laravel và Vuejs
Số bài học:
Lượt xem: 15802
Đăng bởi: Admin
Chuyên mục: Laravel

Học lập trình Laravel
Số bài học:
Lượt xem: 22788
Đăng bởi: Admin
Chuyên mục: Laravel