我只想显示startdate从明天开始的事件。我该如何继续?目前它还考虑了h:i:s。
public function display()
{
$now = date('Y-m-d H:i:s');
$this->loadModel('Events');
$events = $this->Events
->find()
->contain(['Categories', 'Venues'])
->limit(5)
->order(['events.startdate' => 'ASC'])
->where(['events.startdate >' => $now]);
$this->set('upcomingEvents', $events);
}
我试过了,但不起作用:
public function display()
{
$now = date('Y-m-d');
$this->loadModel('Events');
$events = $this->Events
->find()
->contain(['Categories', 'Venues'])
->limit(5)
->order(['events.startdate' => 'ASC'])
->where(['date_format("%Y-%m-%d", events.startdate)' => $now]);
$this->set('upcomingEvents', $events);
}
2条答案
按热度按时间xkrw2x1b1#
不需要在查询中格式化日期并丢失索引功能,而是与使用
00:00:00
作为时间部分(例如,一天的开始)的日期时间字符串进行比较。使用
date('Y-m-d 00:00:00')
可以轻松地实现这一点,但这是今天的事,而不是明天的事,您需要为date()
提供一个时间戳,如date('Y-m-d 00:00:00', strtotime('+1 day'))
。您还可以使用CakePHP附带的日期时间功能。现在
\Cake\Chronos\Date::tomorrow()
将创建一个日期对象来表示2021-10-06
,其中的时间部分将始终为00:00:00
。ORM将根据列类型自动格式化日期对象,因此对于您的“我假设为
DATETIME
”列,它将在SQL中最终显示为2021-10-06 00:00:00
。另请参阅
5uzkadbs2#
不确定这是否是正确的继续方式,但它使用函数DATA_FORMAT()
下面是查询:
或者我们也可以在条件数组中使用