我正在尝试从日期列高于或等于当前时间的模型中获取关系数据。
日期列的格式如下: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);
}
我做错了什么?
听起来你需要使用
>=
,例如:
->whereDate('date', '>=', Carbon::now('Europe/Stockholm'))
在这里你可以使用这个:
->where('date', '>=', date('Y-m-d'))
使用
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 函数中。
对于 Laravel 的测试用例:
$this->assertDatabaseHas('my_table', [
'name' => $name,
[ 'updated_at', '>=', $updatedAt ] // $updatedAt is a Carbon object
]);