Laravel二次加入问题

时间:2018-02-23 22:08:12

标签: php mysql laravel laravel-5 laravel-5.5

我有一个博客,我想在动态更改日期开始和结束日期内显示包含帖子的所有类别。

我有以下雄辩的查询:

$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();

这会返回日期范围内没有Categoriesposts的{​​{1}}。但是,如果某个类别包含posts但其中没有一个属于日期范围,则根本不会显示。

如何在日期范围内显示所有posts并加入categories?如果范围内没有帖子,则应返回null。

1 个答案:

答案 0 :(得分:1)

经过一些调整后......

$Categories = Category::with('Posts', function ($query) use ($StartDate, $EndDate) {
                        $query->whereBetween('created_at', [$StartDate, $EndDate]);
                    })
                    ->get();