cakephp - 如何使用日期格式处理查询生成器
问题描述
我只想显示 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);
}
解决方案
无需在查询中格式化日期并失去索引功能,而是与00:00:00
用于时间部分的日期时间字符串进行比较,例如一天的开始。
您可以使用 轻松实现这一点date('Y-m-d 00:00:00')
,但是那是今天,而不是明天,您需要date()
使用像date('Y-m-d 00:00:00', strtotime('+1 day'))
.
您还可以使用 CakePHP 附带的日期时间功能。Today\Cake\Chronos\Date::tomorrow()
将创建一个日期对象,表示2021-10-06
时间部分始终在哪里00:00:00
。
->where(['Events.startdate >=' => \Cake\Chronos\Date::tomorrow()])
ORM 将根据列类型自动格式化日期对象,因此对于您的我想DATETIME
列,它最终会像2021-10-06 00:00:00
在 SQL 中一样。
也可以看看
推荐阅读
- docker - Windows Docker NAT 似乎完全崩溃了
- google-colaboratory - 使 colab 使用最新安装的库
- internet-explorer - Internet Explorer 中的多个 Select2 标记问题
- javascript - 访问用户集合中的数组。[Meteor + React Native]
- unity3d - Unity3D - 为什么以简单复制的方式重构我的脚本不起作用?
- javascript - 将 Array.push 作为参数传递会在 JavaScript 中引发异常
- sql - RODBC:围绕 SQL Server APPENDS 的日期时间值引用
- git - 在 VSCode 中跟踪子文件夹中的 git 更改
- node.js - 我正在尝试在 node.js 项目中的模块之间传递数据,但我遗漏了一些东西
- android - 使用 ContactsContract,查询匹配的姓名或电子邮件