Laravel 拉雷维尔最后的记录在哪里

Laravel 拉雷维尔最后的记录在哪里,laravel,laravel-6.2,Laravel,Laravel 6.2,这是我正在尝试执行的当前查询 Statement::whereHas('history', function ( $query) use ($end) { $query->where('created_at', '<', Carbon::parse($end))->latest()->limit(1)->where('read_flag', '=', 0); }); })->get()

这是我正在尝试执行的当前查询

Statement::whereHas('history',  function ( $query) use ($end) {
                $query->where('created_at', '<', Carbon::parse($end))->latest()->limit(1)->where('read_flag', '=', 0);
            });
        })->get()
此记录是较旧的记录,具有
read\u 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\u 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",
}

好吧,没有内置的雄辩功能可以让你做出这种行为

但是,您可以在检索后筛选集合,并拒绝与条件不匹配的元素,如下所示(代码未经测试):

$statements=Statement::whereHas('history',function($query)use($end){
$query->where([

['created_at','$end是我使用的一个变量,因此我可以查看较旧时期的选择记录。使用此查询时,我将传递'2020-02-09 23:59:59',您是否可以更新答案并将实际输入和输出写入预期结果,或者您也可以尝试使用
whereDate()
而不是
where()
whereDate()似乎没有什么不同这里的问题
->latest()->limit(1)->where('read_flag','=',0)
您认为您正在获取最后一条记录,然后检查它的标志,但事实并非如此,查询首先匹配where条件,然后尝试获取最后一条记录。为了提高效率,您可以使用
with
函数在雄辩的查询中加载最后一个历史记录元素,使其成为一个单一的数据库查询(在reject函数中获取最后一个历史记录时)每个语句记录的额外查询的d。
{
"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",
}
$statements = Statement::whereHas('history', function ($query) use ($end) {
    $query->where([
        ['created_at', '<', Carbon::parse($end)],
        ['red_flag', 0]
    ]);
})
->get()
->reject(function($element) use($end) {
    $latestHistory = $element->history()->latest()->first();
    return (Caron::parse($latestHistory->created_at)->gte(Carbon::parse($end)) || $latestHistory->red_flag !== 0);
});