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 Facebook

Laravel Socialite Login With Facebook

Ngoài xác thực dựa trên biểu mẫu điển hình, Laravel cũng cung cấp một cách đơn giản và thuận tiện để sử dụng Laravel Socialite để xác thực với các nhà cung cấp OAuth. Socialite hiện hỗ trợ xác thực qu...

Implementing Private User Folders with elFinder in Laravel

Implementing Private User Folders with elFinder in Laravel

elFinder elFinder là một trình quản lý tập tin mã nguồn mở dành cho web, được viết bằng JavaScript sử dụng jQuery UI. elFinder được phát triển dựa trên cảm hứng từ sự tiện lợi và đơn giản của chư...

Laravel Queues and Jobs

Laravel Queues and Jobs

Các công ty có thẻ gặp khó khăn trong việc quản lý các dịch vụ hoặc ứng dụng của họ. Ví dụ, các công ty các thực hiện gửi email cho hàng triệu người dùng hoặc thực hiện sao lưu dữ liệu. Tất cả các hoạ...

Laravel Factories, Seeder

Laravel Factories, Seeder

Trong bài viết này, tôi sẽ hướng dẫn các bạn về cách tạo dữ liệu giả trong cơ sở dữ liệu bằng cách sử dụng Laravel Factory và Seed trong Database Seeder. Để tạo model factory, bạn cần chạy lệnh sau...

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

How to insert into a database at lightning speed?

How to insert into a database at lightning speed?

Trong quá trình thực hiện dự án cho công ty, một trong những yêu cầu đặt ra là import dữ liệu từ file CSV (chứa dữ liệu từ hệ thống cũ) vào cơ sở dữ liệu MySQL của hệ thống mới. Do sự thay đổi cấu...

Laravel Socialite Login With Linkedin

Laravel Socialite Login With Linkedin

LinkedIn LinkedIn là mạng xã hội tập trung vào mạng lưới nghề nghiệp và phát triển nghề nghiệp và chuyên nghiệp lớn nhất thế giới trên internet. Bạn có thể sử dụng LinkedIn để tìm công việc hoặc...

Laravel Export & Import CSV

Laravel Export & Import CSV

Trong bài viết này, tôi sẽ hướng dẫn các tạo cách Export hoặc Import CSV trong Laravel. Nhưng thay vì chỉ viết hàm đơn thuần trong PHP thì tôi sẽ hướng dẫn các tạo ra một Service trong Laravel bằng cá...

Laravel TinyMCE 6 Image Upload

Laravel TinyMCE 6 Image Upload

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

ManhDanBlogs