cakephp:如何使NOW()在搜索条件下工作?

cakephp:如何使NOW()在搜索条件下工作?,cakephp,mysql,Cakephp,Mysql,我正在尝试获取所有日期大于现在的记录。我试过这个,但不起作用: $all_dates = $this->TourDate->find('all', array('conditions' => array('TourDate.date >=' => 'NOW()'), 'order' => array('TourDate.date ASC'))); 如果我将NOW()替换为当前日期,它将正常工作。这是为什么?我不使用CakePHP,但我非常确定您的'NOW()

我正在尝试获取所有日期大于现在的记录。我试过这个,但不起作用:

$all_dates = $this->TourDate->find('all', array('conditions' => array('TourDate.date >=' => 'NOW()'), 'order' => array('TourDate.date ASC')));

如果我将NOW()替换为当前日期,它将正常工作。这是为什么?

我不使用
CakePHP
,但我非常确定您的
'NOW()'
正在解析为字符串,最后您得到了类似

TourDate.date >= 'NOW()'
也许你应该试试

array('TourDate.date >= NOW()')

仅作为值,而不是将其拆分为
key=>value
style?

hsz是正确的。Cake正在将
NOW()
条件解释为字符串
'NOW()'
。正如hsz所建议的,在您的条件下提供完整的SQL代码片段将起作用


您可能会尝试使用
date('Y-m-dh:i:s')
来代替
NOW()
(正如我在本答案的第一个版本中所建议的那样)<不要这样做正如hsz在下面指出的,这将阻止缓存查询。

我相信CakePHP会删除任何类似SQL的函数,以防止SQL注入攻击。虽然这让我很恼火,但我通常也会使用date('Y-m-dh:I:s')技巧。

'conditions'=>array('TourDate.date>=NOW()')


否则,cakephp将引用NOW()函数,mysql将把它视为一个字符串。

如果您正在寻找一种使用PHP函数istead和mysql函数的方法,您不必使用冗长的格式
$conditions=array('begin>'=>date('Y-m-dh:i:s')
,mysql理解较短的PHPs date预设值()对于ISO 8601日期,
$conditions=array('begin>'=>date('c'))


我喜欢这样做,比如查询
'begin>'=>date('c',strotime(+4周))
,这是非常可读的代码,当您查看SQL查询时非常适合调试

如果使用
date()。Cake只获取关联数组中的值,并将其转换为MySQL的字符串文字。上面的解决方案(将NOW()函数放在键中,而不是值中)有效。奇怪的是,你只是因为不正确而被否决了。是的,就是这样。我不知道可以不使用key=>value样式。谢谢提示-如果某个答案是解决方案,请单击答案左侧的复选框框框来标记。(+1)答案不错。这对我有帮助。谢谢。只有当您的数据库的时区与CakePHP的时区相同时,此解决方案才能准确工作。此外,如果您的条件涉及
创建的
和/或
修改的
字段,您应该记住这些时间是CakePHP时间。所以你的条件写得更好,Model.date>='=>date('Y-m-dh:i:s')