php - Laravel Eloquent 比较日期时间字段中的日期

标签 php mysql datetime laravel-4

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

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 的 Eloquent 的等价物是什么?

最佳答案

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

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

你的结果可以这样实现:

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

更多示例,请参见 #3946 的第一条消息这个Laravel Daily article .


更新: 虽然上述方法很方便,但正如 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 is not the end of the day. No, really!
  • 请记住“零日期”情况(“0000-00-00 00:00:00”)。尽管应该避免这些“零日期”,但它们是许多问题的根源。如果需要,最好使该字段可以为空。

关于php - Laravel Eloquent 比较日期时间字段中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25139948/

相关文章:

c# - EntityFrameWork 更新多行

php - 原始价格未显示在 magento 1.8.1 的销售订单 View 中?

java - JExcelAPI - 将日期写入 Excel 工作表会忽略日、月和年

PHP MYSQL 匹配并输出

PHP:数组中的 DATETIME 作为对象。如何回应

MYSQL查询以1分钟间隔返回记录

python - 属性错误 : 'str' object has no attribute 'strftime'

php - 如何使用简单的 html dom 解析器从 scrape 中抓取特定数据

php - 处理 mysql 搜索中的特殊字符,例如西古尔·罗斯

java - 一年中两个日期之间的间隔时间