我想通过表达式从表中获取所有行:
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)。
whereDay()
whereMonth()
whereYear()
whereDate()
他们DATE()为您完成SQL 工作,并管理SQLite的差异。
DATE()
您的结果可以这样实现:
->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)
笔记: