【问题标题】:adding a whereBetween clause doesnt return expected result set添加 where 子句不会返回预期的结果集
【发布时间】:2019-07-25 23:21:34
【问题描述】:

示例数据集

id,created_at, status, category, c_sub_category
1, 2019-01-02 16:36:06, closed, Issue, Team 1
2, 2019-01-03 18:36:01, closed, Fix, Team 2

如您所见,c_sub_category 有两种类型,因此 group by 应返回两行。当我添加 whereBetween 子句时,它目前只返回第一个结果

我正在使用Laravel 5.6SQLite 我试图在一个时间范围内返回某些结果。问题是当我在created_at 列上添加whereBetween 子句时,它会丢失结果。 created_at 的类型为 DateTime

startDateendDate 是碳实例

{
    "startDate": {
        "date": "2019-01-01 00:00:00.000000",
        "timezone_type": 3,
        "timezone": "America/Toronto"
    },
    "endDate": {
        "date": "2019-01-06 23:59:59.999999",
        "timezone_type": 3,
        "timezone": "America/Toronto"
    }
}

这个查询应该返回两个结果。我按 c_sub_category 分组,只有两个 c_sub_categories 但目前它只返回 1 个结果

$data  = Tickets
            ::whereBetween('created_at', [$week["startDate"], $week["endDate"]])
            ->where('status', 'closed')
            ->where('category', '!=', 'New Development')
            ->groupBy('c_sub_category')
            ->get();

这个没有whereBetween子句的查询返回两个正确的结果

$data  = Tickets
            ->where('status', 'closed')
            ->where('category', '!=', 'New Development')
            ->groupBy('c_sub_category')
            ->get();

我尝试过的其他方法也没有返回正确的结果集

$data  = Tickets
            ::where(function ($query) use ($week) {
                $query->whereBetween('created_at', [$week["startDate"], $week["endDate"]]);
            })
            ->where('category', '!=', 'New Development')
            ->where('status', 'closed')
            ->groupBy('c_sub_category')
            ->get();

$data  = Tickets
            ::where(function ($query) use ($week) {
                $query->whereBetween('created_at', [$week["startDate"], $week["endDate"]]);
            })
            ->where(function ($query) use ($week) {
                $query->where('category', '!=', 'New Development');
                      ->where('status', 'closed');

            })
            ->groupBy('c_sub_category')
            ->get();

【问题讨论】:

  • $week["startDate"]$week["endDate"] 是 Carbon 还是字符串的实例?
  • 你能提供一个数据集给我们玩吗?
  • 你的日期是一天的开始和一天的结束吗? Carbon 库为此提供了辅助方法。
  • $week["startDate"]$week["endDate"] 是碳实例。我已经用一个例子更新了帖子
  • 你能给我们一个应该由 is not 返回的行的例子吗?

标签: laravel sqlite laravel-5 eloquent


【解决方案1】:

你必须把长日期格式,不仅仅是日期

Tickets:whereBetween('created_at', ['2019-01-01 00:00:00.000000', '2019-01-06 23:59:59.999999'])

【讨论】:

  • 不,长日期不是强制性的(不带尾随零)
【解决方案2】:

另一种解决方案可能是:

Tickets::where('created_at', '>=','2019-01-01 00:00:00.000000')->where('created_at', '<=','2019-01-06 23:59:59.999999');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2021-03-21
    • 2020-06-23
    • 2023-03-26
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多