【发布时间】: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.6 和SQLite 我试图在一个时间范围内返回某些结果。问题是当我在created_at 列上添加whereBetween 子句时,它会丢失结果。 created_at 的类型为 DateTime
startDate 和 endDate 是碳实例
{
"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