Để sử dụng Eager Loading với điều kiện trong Laravel, bạn có thể sử dụng phương thức whereHas
hoặc orWhereHas
trong Eloquent Builder.
Ví dụ, giả sử bạn muốn lấy danh sách các bài viết và chỉ lấy những bài viết có bình luận của một người dùng cụ thể, bạn có thể sử dụng mã sau:
$user_id = 1;
$posts = Post::whereHas('comments', function ($query) use ($user_id) {
$query->where('user_id', $user_id);
})
->with(['comments' => function ($query) use ($user_id) {
$query->where('user_id', $user_id);
}])
->get();
Trong đó, whereHas
được sử dụng để chỉ lấy các bài viết có bình luận của người dùng có user_id
là 1. with
được sử dụng để tải trước các bình luận của người dùng có user_id
là 1. Bằng cách này, chúng ta có thể tránh việc thực hiện nhiều truy vấn trong cơ sở dữ liệu và tối ưu hóa hiệu suất của ứng dụng.
Bạn có thể thay đổi điều kiện trong whereHas
để lấy các mối quan hệ khác trong cơ sở dữ liệu, cũng như thay đổi điều kiện trong with
để lấy các trường khác của mối quan hệ.