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 cách dễ dàng hơn bao giờ hết.
Trong phiên bản Laravel trước đó, đã cung cấp cho chúng ta 2 method là whereRelation
và whereMorphRelation
để đơn giản hóa thực hiện các truy vấn mối quan hệ.
Nhưng lại không cung cấp cho chúng ta các method đối lập, thì trong phiên bản Laravel 11.37 đã cung cấp thêm cho chúng ta thêm 2 method:
● whereDoesntHaveRelation
● whereMorphDoesntHaveRelation
Method whereDoesntHaveRelation
Trước đây, để lọc dữ liệu khi mối quan hệ không thỏa mãn điều kiện, chúng ta thường sử dụng cú pháp như sau:
return User::whereDoesntHave('comments', function ($query) {
$query->where('created_at', '>', now()->subDay());
})->get();
Tuy nhiên, với sự hỗ trợ của method whereDoesntHaveRelation
, chúng ta có thể viết câu truy vấn ngắn gọn hơn:
return User::whereDoesntHaveRelation(
'comments', 'created_at', '>', now()->subDay()
)->get();
return User::whereDoesntHaveRelation(
'comments', 'is_approved', false
)->get();
Method whereMorphDoesntHaveRelation
Trước đây, khi chưa có method whereMorphDoesntHaveRelation
, chúng ta thường sử dụng cách sau để lọc dữ liệu các mối quan hệ Polymorphic:
return Comment::whereDoesntHaveMorph('commentable', [Post::class, Video::class], function ($query) {
$query->where('created_at', '>', now()->subDay());
})->get();
Tuy nhiên, với sự hỗ trợ của method whereMorphDoesntHaveRelation
, chúng ta có thể viết câu truy vấn ngắn gọn hơn:
return Comment::whereMorphDoesntHaveRelation(
'commentable', [Post::class, Video::class], 'created_at', '>', now()->subDay()
)->get();
return Comment::whereMorphDoesntHaveRelation(
'commentable', [Post::class, Video::class], 'is_approved', false
)->get();
Kết luận
Method whereDoesntHaveRelation
và whereMorphDoesntHaveRelation
đã mang đến một cải tiến đáng kể trong việc viết các câu truy vấn lọc dữ liệu trên các mối quan hệ trong Laravel.
Và có thể trở thành công cụ hữu ích giúp lập trình viên tối ưu hóa mã nguồn khi làm việc với các mối quan hệ trong Laravel