我有一个博客,我想在动态更改日期开始和结束日期内显示包含帖子的所有类别。
我有以下雄辩的查询:
$Categories = Category::with('Posts')
->whereHas('Posts', function ($query) use ($StartDate, $EndDate) {
$query->where('created_at', '>=', $StartDate);
$query->where('created_at', '<=', $EndDate);
})
->get();
这将仅返回两个日期之间Posts
的返回类别。
我在网上找到了doesntHave
。
$Categories = Category::with('Posts')
->doesntHave('Posts')
->orWhereHas('Posts', function ($query) use ($StartDate, $EndDate) {
$query->where('created_at', '>=', $StartDate);
$query->where('created_at', '<=', $EndDate);
})
->get();
这会返回日期范围内没有Categories
或posts
的{{1}}。但是,如果某个类别包含posts
但其中没有一个属于日期范围,则根本不会显示。
如何在日期范围内显示所有posts
并加入categories
?如果范围内没有帖子,则应返回null。
答案 0 :(得分:1)
$Categories = Category::with('Posts', function ($query) use ($StartDate, $EndDate) {
$query->whereBetween('created_at', [$StartDate, $EndDate]);
})
->get();