【问题标题】:Laravel no results returned when working with datetime field使用日期时间字段时,Laravel 没有返回结果
【发布时间】:2017-01-08 14:10:07
【问题描述】:

所以我有这个查询:

Report::whereDate('date', '=', Carbon::now()->format('Y-m-d H:i'))->get();

日期是这样存储的,例如:

2017-01-08 10:00:00

但是我从来没有得到任何结果,这是否与秒数有关?如果是这样,我怎样才能避免这种情况并得到我的结果?使用 mutator 或许可以忽略秒数?

PS。我想从指定时间获取结果,因为我将它用于计划任务(命令)。电子邮件应该在指定的时间发送,并且时间会有所不同:)

【问题讨论】:

  • 您可能想要指定您的约会应该在的时间范围。在这种情况下,在今天 0:00 到今天 23:59 之间。
  • 删除时间部分并尝试。 whereDate('date', '=', Carbon::now()->format('Y-m-d'))
  • 我可能应该提到时间部分非常重要,对不起:)
  • 您在编写查询时遇到了问题。在我提出解决方案的地方寻找我的答案。
  • 我修改了答案

标签: php laravel datetime php-carbon


【解决方案1】:

你可以试试WhereRaw

$format = Carbon::now()->format('Y-m-d H:i');
Report::whereRaw("date_format(date, '%Y-%m-%d %H:%i ')  = '$format'")

【讨论】:

  • 谢谢,试试看:)
  • 让它工作,我只需要时间,所以我把它改成了time_format,它工作了。非常感谢:)
【解决方案2】:

我想通了,我不想在我的数据库中使用布尔值来检查特定报告是否已发送电子邮件,因为它们是每日报告。但我将在一天结束时重新设置这些布尔值。

【讨论】:

    【解决方案3】:

    Report 模型中将date 添加到$dates 属性:

    protected $dates = ['date'];
    

    你说你要查看时间,那么就这样做吧:

    Report::where('date', Carbon::now())->get();
    

    【讨论】:

    • 我可能应该提到时间部分非常重要,抱歉 :) 我已经将日期添加到我的 $dates 数组中,谢谢 :)
    • 我会编辑我的问题,让我更清楚我想要什么,抱歉
    【解决方案4】:

    我想我误解了这个问题。

    匹配日期时间的便捷方法是使用 Carbon。

    在您的模型中添加以下行。

    protected dates = ['date'];
    

    通过这样做,您的日期将被保存为 Carbon 实例。

    现在你可以做

    Report::whereDate('date', Carbon::now())->get();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2013-02-19
    • 2019-11-16
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多