New Laravel 10: Eloquent WhereAny() và WhereAll()

Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ liệu phức tạp một cách dễ dàng hơn bao giờ hết.

Trong phiên bản Laravel 10, Laravel cung cấp 2 method cần thiết để giúp các nhà phát triển xây dựng các truy vấn linh hoạt là whereAnywhereAll.

Hai method cho phép chúng ta tạo ra các truy vấn cơ sở dữ liệu với các điều kiện logic ORAND trên nhiều cột.

whereAny trong Laravel là gì?

whereAny là một method truy vấn mạnh mẽ được sử dụng khi bạn muốn áp dụng cùng một query constraints trên nhiều cột. 

whereAny sẽ áp dụng điều kiện OR giữa các cột, điều này là rất cần thiết cho Dynamic Searches.

Example: Tìm kiếm trên nhiều cột

Hãy tưởng tượng bạn đang muốn tìm kiếm người dùng có name hoặc email chứa từ khóa manhdandev. Bạn sẽ sử dụng whereAny như sau:

$search = 'manhdandev';
$users  = User::whereAny(['name', 'email'], 'LIKE', "%$search%")->get();

Truy vấn trên sẽ cho kết quả SQL sau:

SELECT * FROM "users" 
WHERE ("name" LIKE "%manhdandev%" OR "email" LIKE "%manhdandev%");

whereAll trong Laravel là gì?

Tương tư như whereAny, whereAll cũng là một method truy vấn mạnh mẽ được sử dụng khi bạn muốn áp dụng cùng một query constraints trên nhiều cột.

Nhưng whereAll sẽ áp dụng điều kiện AND giữa các cột, nghĩa là tất cả các tiêu chí phải được đáp ứng.

Example: Tìm kiếm khớp trên nhiều cột

Hãy tưởng tượng bạn đang muốn tìm kiếm người dùng có name và email đều chứa từ khóa manhdandev. Bạn sẽ sử dụng whereAll như sau:

search = 'manhdandev';
$users = User::whereAll(['name', 'email'], 'LIKE', "%$search%")->get();

 Truy vấn trên sẽ cho kết quả SQL sau:

SELECT * FROM "users" 
WHERE ("name" LIKE "%manhdandev%" AND "email" LIKE "%manhdandev%");

Kết hợp whereAny và whereAll trong Eloquent ORM

Trong một số trường hợp, chúng ta cũng có thể kết hợp cả 2 method whereAnywhereAll để tạo ra các câu truy vấn dữ liệu nâng cao.

Ví dụ, bạn muốn tìm người dùng có name hoặc email chứa từ khóa manhdandev và có role và position là admin. Bạn sẽ kết hợp whereAnywhereAll như sau:

$search     = 'manhdandev';
$attributes = 'admin';
$users      = User::whereAny(['name', 'email'], 'LIKE', "%$search%")
                ->whereAll(['role', 'position'], '=', $attributes )
                ->get();

 Truy vấn trên sẽ cho kết quả SQL sau:

SELECT * FROM "users" 
WHERE ("name" LIKE "%manhdandev%" OR "email" = LIKE "%manhdandev%") AND ("role" = "admin" AND "position" = "admin");

Kết luận

Laravel whereAnywhereAll là hai method cung cấp cho các nhà phát triển các công cụ mạnh mẽ để xây dựng các truy vấn phức tạp và linh hoạt.

Cho dù chúng ta sử dụng điều kiện OR hay AND thì 2 method này đều cung cấp các giải pháp sạch và hiệu quả trong nhiều trường hợp sử dụng khác nhau.

Bằng cách hiểu whereAnywhereAll, bạn có thể tối ưu hóa các truy vấn cơ sở dữ liệu và xử lý nhiều tình huống tìm kiếm khác nhau trong dự án Laravel của mình.

CÓ THỂ BẠN QUAN TÂM

Csv import with Validation for Laravel

Csv import with Validation for Laravel

Trong một bài viết lúc trước, mình đã chia sẻ đến các bạn cách xây dựng một service import và export CSV sử dụng Facades, nếu có bạn nào không biết hoặc đã quên các bạn có thể tham khảo lại bài viết t...

Laravel Custom Eloquent Casts

Laravel Custom Eloquent Casts

Trước đây, chúng ta bị giới hạn cast mặc định do Laravel cung cấp. Mặc dù, có một số gói thư viện có thể  giúp chúng ta custom được nhưng chúng có một nhược điểm lớn. Bởi vì, chúng ghi đề phương thức...

Laravel Change Expire Time Cookie Remember

Laravel Change Expire Time Cookie Remember

Vấn đề Đôi khi, trang web của bạn chỉ muốn người dùng sử chức năng remembering users  trong 7 ngày hoặc là 30 ngày chẳng hạn. Nhưng Authentication của Laravel không cung cấp cho chúng ta tùy chọn đ...

Laravel Upload File Using Trait

Laravel Upload File Using Trait

Hiện nay, đa số các dự án đều có chức năng upload file, nên tôi đã thử xây dựng một lớp Trait Upload File, để chúng ta dễ dàng sao chép qua các dự án khác để sử dụng, nhằm rút ngắn thời gian phát triể...

Laravel One to One Eloquent Relationship

Laravel One to One Eloquent Relationship

Mối quan hệ một-một là một mối quan hệ rất cơ bản. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách tạo dữ liệu và truy xuất dữ liệu bằng Eloquent Model. Trong hướng dẫn này, tôi sẽ tạo hai bảng là u...

Export CSV from SQL Server - Import into MySQL with Laravel

Export CSV from SQL Server - Import into MySQL with Laravel

Transfer Database Trong quá trình phát triển và bảo trì dự án, việc di chuyển cơ sở dữ liệu từ hệ thống này sang hệ thống khác là một nhiệm vụ khá phổ biến. Giả sử bạn cần di chuyển dữ liệu từ SQ...

Fast Paginate in Laravel

Fast Paginate in Laravel

Laravel Fast Paginate là gì? Laravel Fast Paginate là một macro nhanh về phân trang offset/limit cho Laravel. Nó được sử dụng để thay thể paginate trong Laravel.Package này sử dụng phương pháp SQL t...

Laravel Migration

Laravel Migration

Migration cho phép các nhà phát triển (Developer) nhanh chóng tạo ra cở sở dữ liệu của ứng dụng mà không cần vào màn hình quản lý cơ sở dữ liệu hay chạy bất kì một câu lệnh SQL nào. Trước hết, nếu...

Implementing Private User Folders with CKFinder in Laravel

Implementing Private User Folders with CKFinder in Laravel

CKFinder 3 CKFinder 3 là trình quản lý tập tin được tích hợp với CKEditor 4 và CKEditor 5. Nó giúp bạn dễ dàng đưa các tập tin và hình ảnh vào nội dung của Editor một cách an toàn. Đây là một tín...

ManhDanBlogs