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

Document Laravel API With OpenAPI (Swagger)

Document Laravel API With OpenAPI (Swagger)

Swagger là gì? Swagger là một Ngôn ngữ mô tả giao diện để mô tả các API RESTful được thể hiện bằng JSON. Swagger được sử dụng cùng với một bộ công cụ phần mềm mã nguồn mở để thiết kế, xây dựng, l...

Laravel Scout Full Text Search With Meilisearch

Laravel Scout Full Text Search With Meilisearch

Laravel Scout cung cấp một giải pháp đơn giản, dựa trên trình điều khiển để thêm tìm kiếm Full Text vào các mô hình Eloquent của bạn. Khi sử dụng Eloquent, Scout sẽ tự động giữ chỉ mục tìm kiếm của bạ...

Integrating TinyMCE in Laravel 10 using Vite

Integrating TinyMCE in Laravel 10 using Vite

TinyMCE TinyMCE là một trình soạn thảo WYSIWYG được xây dựng trên nền tảng Javascript, được phát triển dưới dạng mã nguồn mở theo giấy phép MIT bởi Tiny Technologies Inc. TinyMCE cho phép ngư...

Laravel Socialite Login With Gitlab

Laravel Socialite Login With Gitlab

GitLab GitLab là kho lưu trữ Git dựa trên web cung cấp các kho lưu trữ mở và riêng tư miễn phí, các khả năng theo dõi vấn đề và wiki. Đây là một nền tảng DevOps hoàn chỉnh cho phép các chuyên gia...

Send Slack Notifications In Laravel

Send Slack Notifications In Laravel

Slack là gì? Slack là một công cụ giao tiếp tại nơi làm việc, "một nơi duy nhất cho các tin nhắn, công cụ và file." Điều này có nghĩa là Slack là một hệ thống nhắn tin tức thì với nhiều plug-in cho...

Integrating OpenAI in Laravel

Integrating OpenAI in Laravel

OpenAI OpenAI là một phòng thí nghiệm nghiên cứu trí tuệ nhân tạo (AI) của Mỹ bao gồm tổ chức phi lợi nhuận OpenAI Incorporated (OpenAI Inc.) và công ty con hoạt động vì lợi nhuận OpenAI Limited Par...

Laravel Authentication With Laravel UI

Laravel Authentication With Laravel UI

Laravel UI Laravel UI cung cấp một cách nhanh chóng để mở rộng các route và view cần thiết cho chức năng Authentication và bao gồm các cài đặt liên quan cho Bootstrap, React hoặc Vue. Mặc dù nó v...

Laravel Validate Video Duration

Laravel Validate Video Duration

Đôi khi trong dự án, chúng ta cần xác định thời lượng video được phép upload lên server. Nhưng rất tiếc, Laravel không cung cấp validate xác định thời lượng video để chúng ta thực hiện được. Vì vậy, t...

Laravel Controllers

Laravel Controllers

Trong mô hình MVC, chữ "C" là từ viết tắt của Controller và nó đóng vai trò rất quan trọng để phân tích các logic business. Khi người dùng truy cập vào trình duyệt, nó sẽ đi đến route đầu tiên, sau đó...

ManhDanBlogs