Quay lại

Cách group các where constraints trong Laravel Eloquent Chuyên mục PHP và Laravel    2023-08-02    553 Lượt xem    39 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Cách group các where constraints trong Laravel Eloquent

Khi viết các truy vấn MySQL, nếu có nhiều hơn hai điều kiện where, bạn sẽ muốn nhóm các constraints/conditions (ràng buộc/điều kiện) nhất định để tránh hành vi không mong muốn. Ví dụ: kiểm tra truy vấn sau.

select * from books 
        where author_name = 'JK Rowling' 
        and rating > 4 
        or genre = 'fiction';

Ở đây, nếu chúng ta không đề cập cụ thể cách đánh giá điều kiện and và or, chúng ta có thể nhận được kết quả không mong muốn. Vì vậy, chúng ta phải xác định rõ ràng thứ tự của chúng và đối với điều đó và trong MySQL, chúng ta có thể sử dụng dấu ngoặc đơn để đạt được điều này.

Nếu chúng ta muốn xác định xem rating > 4 or genre = 'fiction' trong truy vấn trước có nên được đánh giá trước hay không, chúng ta có thể làm điều đó bằng cách sử dụng dấu ngoặc đơn như này.

select * from books 
        where author_name = 'JK Rowling' 
        and (rating > 4 or genre = 'fiction');

Chúng ta cũng có thể làm được điều tương tự trong Eloquent.  Đối với điều này, chúng ta có thể chuyển một Closure vào phương thức where của Eloquent, nơi chúng ta có thể đặt thêm các ràng buộc muốn được nhóm lại. Vì vậy, nếu chúng ta muốn viết truy vấn trước đó bằng Eloquent, chúng ta có thể làm như này.

$books = Book::where('author_name', '=', 'JK Rowling')
           ->where(function ($query) {
               $query->where('rating', '>', 4)
                     ->orWhere('genre', '=', 'fiction');
           })
           ->get();

Như bạn có thể thấy ở đây, chúng ta đã pass một Closure vào where condition sẽ nhận một query builder instance $query trên đó chúng ta có thể thêm nhiều ràng buộc hơn sẽ được chứa trong nhóm dấu ngoặc đơn.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday