Sử dụng Query Scope trong Laravel

0

Laravel có một cách hay để viết truy vấn cho trình điều khiển cơ sở dữ liệu của bạn bằng cách sử dụng Query Builder:

 $data= Events::with('user')->with('forum')->where('status',1)->paginate(12);

Điều này khá tốt vì giúp chúng ta không cần quan tâm đến SQL mà chú trọng vào việc viết code xây dựng ứng dụng. Nhưng đoạn code này có thể được viết tốt hơn nếu chúng ta sử dụng Local Scopes.

Local Scopes cho phép chúng ta tạo các phương thức Query Builder mà chúng ta có thể xâu chuỗi khi cố gắng truy xuất dữ liệu. Ví dụ, thay vì các câu lệnh -> where (), chúng ta có thể sử dụng -> delivery () và -> pay () một cách rõ ràng hơn.

Đầu tiên, trong  model, mình sẽ thêm các phương thức như bên dưới:

    // ->active()
    public function scopeActive($query)
    {
        return $query->where('status', 1);
    }

Bằng cách này, Laravel sẽ biết rằng đây là một Scope và sẽ sử dụng nó trong Trình tạo truy vấn của bạn.

 $data = Events::with('user')->with('forum')->active()->latest()->paginate(12);

Vậy là chúng ta đã có scope cơ bản để tái sử dụng nhiều lần ,bất cứ khi nào database cập nhật ví dụ như đổi tên column status là status_event hoặc 1 đổi thành  1 giá trị khác thì chỉ cần change trong 1 model 1 lần duy nhất là xong,những chỗ khác sẽ tự động update mà không phải cập nhật lại trong câu truy vấn.

Tham khảo

Leave A Reply

Your email address will not be published.