Quay lại

Phương thức WhereNot mới trong Laravel 9.x Chuyên mục PHP và Laravel    2024-01-05    30 Lượt xem    9 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Phương thức WhereNot mới trong Laravel 9.x

Đôi khi, những điều mà bạn nghĩ là rất rõ ràng và nên tồn tại mà không nghi ngờ lại hoàn toàn không tồn tại.

Một trong những điều như vậy là phương thức whereNot mới cho query Eloquent trong Laravel 9.x. Bạn có thể nghĩ rằng một phương thức đơn giản như vậy nhất định sẽ tồn tại trong Laravel nhưng thật không ngờ là không có.

Vì vậy, để cung cấp cho bạn một khái niệm cơ bản, một truy vấn where điển hình trong Laravel sẽ trông như sau.

$books = DB::table('books')
                    ->where('rating', '>', 2)
                    ->where('author', 'Ruskin Bond')
                    ->get();

Truy vấn này sẽ lấy tất cả các sách có đánh giá lớn hơn 2 và tác giả là "Ruskin Bond".

Cách cũ

Bây giờ, đôi khi bạn cần lấy tất cả các bản ghi của điều kiện ngược lại hoàn toàn với điều này. Trong trường hợp như vậy, truy vấn có thể được viết lại như sau.

$books = DB::table('books')
                    ->where('rating', '<=', 2)
                    ->where('author', '!=', 'Ruskin Bond')
                    ->get();

Truy vấn này sẽ lấy tất cả các bản ghi có rating là 2 hoặc ít hơn và author không phải là "Ruskin Bond".

Bây giờ, truy vấn này hoạt động hoàn toàn ổn nhưng cách viết nó hơi không hiệu quả theo quan điểm của tôi.

Đó là nơi phương thức mới whereNotorWhereNot đến đó.

whereNot và orWhereNot methods

Pull Request này của Marco van Oort bây giờ thêm vào hai phương thức mới, là whereNotorWhereNot, trong Laravel 9.x.

Những phương thức này thực hiện một công việc đơn giản. Nó cho phép bạn xây dựng các điều kiện SQL "where not" trong truy vấn của bạn để bạn có thể dễ dàng xây dựng các truy vấn có logic.

Ví dụ, nếu chúng ta muốn viết lại ví dụ trước bằng cách sử dụng phương thức whereNot, dưới đây là cách chúng ta có thể làm điều đó.

$books = DB::table('books')
            ->whereNot(function ($query) {
                $query->where('rating', '>', 2)
                    ->where('author', 'Ruskin Bond')
            })
            ->get();

Bạn có thể sử dụng cách này trên các mô hình Eloquent.

$books = Book::whereNot(function ($query) {
                $query->where('rating', '>', 2)
                    ->where('author', 'Ruskin Bond')
            })
            ->get();

Tương tự, bạn cũng có thể sử dụng phương thức orWhereNot khi bạn muốn kết hợp điều kiện "or where not".

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