php - Laravel where 二次连接问题

标签 php mysql laravel laravel-5 laravel-5.5

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

我有以下 Eloquent 查询:

$Categories = Category::with('Posts')
                ->whereHas('Posts', function ($query) use ($StartDate, $EndDate) {
                    $query->where('created_at', '>=', $StartDate);
                    $query->where('created_at', '<=', $EndDate);
                })
                ->get();

这将仅返回在两个日期之间包含帖子的返回类别。

我在网上找到了添加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();

这将返回在日期范围内没有帖子帖子类别。但是,如果某个类别有帖子,但其中没有一个在日期范围内,则它们根本不会显示。

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

最佳答案

经过一些调整..

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

关于php - Laravel where 二次连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48956922/

相关文章:

mysql - SQL:通过外键指定唯一约束并高效查询

php - 在 php 中,仅将选中的复选框项目从 while 循环传递到下一页

php - Laravel Blade : @endsection vs @stop

php - mySQLi 没有正确地选择数据

php - 如何通过为空字段添加 NULLS 将 CSV 文件导入 MySQL?

Laravel:使用下拉列表显示数据

php - 将数组中的表单值插入数据库

PHP 将 Paypal 支付分成两个账户

mysql - 选择天数小于给定阈值的行

mysql - Laravel, Eloquent 多对多,数据透视表中的多对多