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à whereAny và whereAll.
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 OR và AND 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 whereAny và whereAll để 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 whereAny và whereAll 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 whereAny và whereAll 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 whereAny và whereAll, 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.