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  Scout Full Text Search with Algolia

Laravel Scout Full Text Search with Algolia

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

Laravel Has Many Through Eloquent Relationship

Laravel Has Many Through Eloquent Relationship

Has Many Through Relationship hơi phức tạp để hiểu một cách đơn giản, nó sẽ cung cấp cho chúng ta một con đường tắt để có thể truy cập dữ liệu của một quan hệ xa xôi thông qua một mối quan hệ trung gi...

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

Laravel View

Laravel View

View là gì? Đây là phần giao diện (theme) dành cho người sử dụng. Nơi mà người dùng có thể lấy được thông tin dữ liệu của MVC thông qua các thao tác truy vấn như tìm kiếm hoặc sử dụng thông qua các...

Efficient Laravel PDF Export for Large Datasets

Efficient Laravel PDF Export for Large Datasets

Xuất file PDF là một tính năng quan trọng của nhiều ứng dụng web, đặc biệt là các trang thương mại điện tử, giúp người dùng tạo và lưu trữ các bản báo cáo, hóa đơn, v.v.  Tuy nhiên, khi phải xử lý...

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

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

Eloquent Methods: whereDoesntHaveRelation and whereMorphDoesntHaveRelation

Eloquent Methods: whereDoesntHaveRelation and whereMorphDoesntHaveRelation

New Laravel 11.37: Eloquent Methods 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...

ManhDanBlogs