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

Laravel Socialite Login With Github

Laravel Socialite Login With Github

GitHub GitHub là một nền tảng phát triển phần mềm trực tuyến. Nó được sử dụng để lưu trữ, theo dõi và cộng tác trong các dự án phần mềm. Nó giúp các nhà phát triển dễ dàng chia sẻ các tập tin mã...

Integrating CKFinder with Amazon S3 in Laravel

Integrating CKFinder with Amazon S3 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...

Generate PDF with Header and Footer on every page in Laravel

Generate PDF with Header and Footer on every page in Laravel

Hôm nay, trong bài viết này mình sẽ chia sẻ với các bạn cách dompdf mà header và footer sẽ được hiển thị ở tất cả các trang. Đây cũng là một vấn đề khá phổ biến, khi chúng ta phát triển các tính năng...

Laravel 9 REST API With Sanctum Authentication

Laravel 9 REST API With Sanctum Authentication

Laravel Sanctum Laravel Sanctum cung cấp một hệ thống authentication đơn giản cho các SPA, ứng dụng Mobile và API đơn giản sử dụng token. Sanctum cho phép ứng dụng của bạn phát hành các mã token...

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 Many to Many Eloquent Relationship

Laravel Many to Many Eloquent Relationship

Many To many Relationship là mối quan hệ hơi phức tạp hơn mối quan hệ 1 - 1 và 1- n. Ví dụ một user có thể có nhiều role khác nhau, trong đó role cũng được liên kết với nhiều user khác nhau. Vì vậy...

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ư...

Export CSV from AWS RDS - Import into MySQL with Laravel

Export CSV from AWS RDS - Import into MySQL with Laravel

Transfer Database Trong quá trình phát triển và bảo trì dự án, nhiệm vụ 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á là phổ biến. Chúng ta thường sẽ sử dụng câu...

Simplify Your Laravel Workflow with Laravel Pint

Simplify Your Laravel Workflow with Laravel Pint

Laravel Pint là gì? Laravel Pint là một công cụ sửa đổi mã nguồn của bạn để mã nguồn của bạn tuân thủ theo các tiêu chuẩn. Nói một cách khác, Laravel Pint sẽ quét toàn bộ mã nguồn của bạn, phát...

ManhDanBlogs