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.