【发布时间】:2020-05-26 17:08:05
【问题描述】:
这是我正在尝试执行的当前查询
Statement::whereHas('history', function ( $query) use ($end) {
$query->where('created_at', '<', Carbon::parse($end))->latest()->limit(1)->where('read_flag', '=', 0);
});
})->get()
我正在尝试获取最新历史值具有read_flag = false 的一些语句。
- 如果最新值为
read_flag = false,则模型应为 返回。 - 如果 a 语句的最新历史值具有
read_flag = truea 即使有较旧的历史,也不应返回模型read_flag = false。
目前,当我只想查询最新记录时,我正在执行的查询仍然返回带有 read_flag = false 的旧值。有什么方法可以做到这一点?
我使用的$end 值是2020-02-09 23:59:59
使用查询时,我必须记录设置。
这条记录是read_flag = true的较新记录
"id":77,
"statement_id":4,
"statement_version_id":4,
"read_count":1,
"unread_count":0,
"read_flag":1,
"created_at":"2020-02-09 12:16:23",
"updated_at":"2020-02-10 12:16:23"
}
这条记录是read_flag = false的旧记录
"id":65,
"statement_id":4,
"statement_version_id":4,
"read_count":0,
"unread_count":2,
"read_flag":0,
"created_at":"2020-02-07 13:25:06",
"updated_at":"2020-02-07 13:25:06"
}
所以在运行查询时,我希望不会返回任何语句,因为最新记录有 read_flag = true
但是这是我得到的输出
{
"id":4,
"site_id":9786,
"team_id":9421,
"name":"ds",
"company_statement_id":1,
"current_statement_version_id":4,
"system_company_statement_id":null,
"created_at":"2020-02-03 10:17:13",
"updated_at":"2020-02-03 10:17:13",
}
【问题讨论】:
-
$end 是我使用的一个变量,因此我可以查看较早时期的选择记录。使用此查询时,我正在传递 '2020-02-09 23:59:59'
-
您能否更新答案并将您的实际输入和输出写入预期结果,或者您也可以尝试使用
whereDate()而不是where() -
whereDate() 似乎没有影响
-
这里的问题
->latest()->limit(1)->where('read_flag', '=', 0)你认为你正在获取最后一条记录然后检查它的标志,但事实并非如此,查询首先匹配 where 条件然后尝试获取最后一条记录。
标签: laravel laravel-6.2