Laravel 雄辩,其中日期等于或大于 DateTime
Posted
技术标签:
【中文标题】Laravel 雄辩,其中日期等于或大于 DateTime【英文标题】:Laravel eloquent where date is equal or greater than DateTime 【发布时间】:2017-10-31 04:05:27 【问题描述】:我正在尝试从日期列高于或等于当前时间的模型中获取关系数据。
日期列的格式如下: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);
我做错了什么? 提前致谢。
【问题讨论】:
如果您想在支票中考虑时间,请使用where
而不是whereDate
,使用>=
而不是>
。
我会试试的。谢谢
似乎只使用“where”来修复它。谢谢!
那是因为whereDate
只会使用值的日期部分而忽略时间。
【参考方案1】:
听起来你需要使用>=
,例如:
->whereDate('date', '>=', Carbon::now('Europe/Stockholm'))
【讨论】:
我也试过了,但到最后好像还不行。例如,如果日期是正确的,但时间超过了日期列的时间,则不应获取它。只应获取尚未过去的日期(包括时间)。 @Kaizokupuffball 你修好了吗?我有同样的问题,只用where
代替whereDate
这只会比较日期(2020-08-07)而忽略时间部分(12:15:09)。
此解决方案将忽略时间,并在提出的问题中返回同一天 2017-06-01 09:00 之前的记录。您可以在此处查看我的答案以在比较中包含时间:***.com/a/69687327/4332391【参考方案2】:
你可以在这里使用:
->where('date', '>=', date('Y-m-d'))
【讨论】:
【参考方案3】:对于 Laravel 的测试用例:
$this->assertDatabaseHas('my_table', [
'name' => $name,
[ 'updated_at', '>=', $updatedAt ] // $updatedAt is a Carbon object
]);
【讨论】:
【参考方案4】:使用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 雄辩,其中日期等于或大于 DateTime的主要内容,如果未能解决你的问题,请参考以下文章
雄辩的倍数 where from date fields <= >=