Laravel 雄辩,日期等于或大于 DateTime

问题描述 投票:0回答:4

我正在尝试从日期列高于或等于当前时间的模型中获取关系数据。

日期列的格式如下:Y-m-d H:i:s

我想做的是抓取 Y-m-d H:i:s 未来的所有行。

示例:假设日期是 2017-06-01,时间是 09:00:00 然后我想获得日期在未来、时间在未来的所有行。

目前我的代码看起来像这样,它几乎可以工作,但它没有获取日期为当天的行。

public function customerCardFollowups() {
    return $this -> hasMany('App\CustomerCardFollowup', 'user_id') -> whereDate('date', '>', Carbon::now('Europe/Stockholm')) -> orderBy('date', 'asc') -> take(20);
}

我做错了什么?

php mysql laravel datetime eloquent
4个回答
62
投票

听起来你需要使用

>=
,例如:

->whereDate('date', '>=', Carbon::now('Europe/Stockholm'))

47
投票

在这里你可以使用这个:

->where('date', '>=', date('Y-m-d'))

11
投票

使用

whereDate
仅比较日期并忽略时间。因此,您的解决方案将给出至少一天后的记录,并且不包括同一天但较晚时间的记录。

如果您按照其他答案中的建议使用

>=
,您将获得从当前日期开始的记录以及甚至在确定时间之前的记录。

对此的一个解决方案是使用

whereRaw
中的 MySQL 函数进行比较。在您的代码中,日期的条件将如下所示:

-> whereRaw("date > STR_TO_DATE(?, '%Y-%m-%d %H:%i:%s')" , Carbon::now('Europe/Stockholm')->format('Y-m-d H:i'));

在代码中,我更改了 Carbon 日期的格式以匹配特定格式,您可以使用任何您想要的格式并将相同的格式放入 STR_TO_DATE 函数中。


2
投票

对于 Laravel 的测试用例:

$this->assertDatabaseHas('my_table', [
    'name' => $name,
    [ 'updated_at', '>=', $updatedAt ] // $updatedAt is a Carbon object
]);
© www.soinside.com 2019 - 2024. All rights reserved.