我正试图获取日期更大的所有记录。我尝试了这个,但它确实有效:
$all_dates = $this->TourDate->find('all', array('conditions' => array('TourDate.date >=' => 'NOW()'), 'order' => array('TourDate.date ASC')));
如果我用它当前的日期替换NOW()。为什么?
答案 0 :(得分:24)
我不使用CakePHP
,但我很确定你的'NOW()'
正在解析为字符串,最后你得到类似
TourDate.date >= 'NOW()'
也许你应该尝试
array('TourDate.date >= NOW()')
仅作为值而不是将其拆分为key => value
样式?
答案 1 :(得分:3)
如果您正在寻找一种方法来使用PHP函数而不是MySQL函数,您不必使用冗长的格式$conditions = array('begin >' => date('Y-m-d H:i:s'))
,MySQL了解PHP的日期较短的'c'预设( )对于带有$conditions = array('begin >' => date('c'))
的ISO 8601日期。
我喜欢这样做'begin >' => date('c', strtotime("+4 weeks"))
之类的查询,这是一个非常易读的代码,当你查看SQL-Queries时很适合调试。
答案 2 :(得分:1)
'conditions' => array('TourDate.date >= NOW()')
否则,cakephp将引用NOW()函数,而mysql会将其视为字符串。
答案 3 :(得分:0)
hsz是对的。 Cake将NOW()
条件解释为字符串'NOW()'
。正如hsz建议的那样,在您的条件中提供完整的SQL片段将起作用。
您可能很想使用date('Y-m-d H:i:s')
代替NOW()
(正如我在此答案的第一个版本中所建议的那样)。 不要这样做!正如hsz在下面指出的那样,这将阻止查询被缓存。
答案 4 :(得分:-1)
我相信CakePHP会删除任何类似SQL的函数以防止SQL注入攻击。就像它让我烦恼一样,我通常也会使用日期('Y-m-d H:i:s')技巧。