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')