Laravel雄辩的日期时间字段中的比较日期

我想通过表达式从表中获取所有行:

table.date <= 2014-07-10

但是,如果该列包含日期时间,可以这样说:

2014-07-10 12:00:00

但是如果我这样做:

where('date', '<=', $date)

它不会排。

我猜这是因为$ date = 2014-07-10,这使MySQL假设它是2014-07-10 00:00:00。

在普通的MySQL中,我会做

where DATE(date) <= $date

使用Laravel的口才相当于什么?

回答:

Laravel

4+为您提供这些方法:whereDay()whereMonth()whereYear()(#3946)和whereDate()(#6879)。

他们DATE()为您完成SQL 工作,并管理SQLite的差异。

您的结果可以这样实现:

->whereDate('date', '<=', '2014-07-10')

有关更多示例,请参见#3946的第一条消息以及此Laravel

Daily文章。

尽管上述方法很方便,但正如Arth所指出的那样,它在大型数据集上效率不高,因为DATE()必须在每个记录上应用SQL函数,从而丢弃了可能的索引。

以下是进行比较的一些方法(但请阅读以下说明):

->where('date', '<=', '2014-07-10 23:59:59')

->where('date', '<', '2014-07-11')

// '2014-07-11'

$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');

->where('date', '<', $dayAfter)

笔记:

  • 23:59:59可以(暂时),因为精确到1秒,但是请看一下这篇文章:23: 59 : 59还不是一天结束。不完全是!
  • 请记住“零日期”的情况(“ 0000-00-00 00:00:00”)。尽管应该避免这些“零日期”,但它们是许多问题的根源。如果需要,最好使该字段为空。

以上是 Laravel雄辩的日期时间字段中的比较日期 的全部内容, 来源链接: utcz.com/qa/431529.html

回到顶部