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

时间:2010-04-20 21:21:56

标签: cakephp mysql

我正试图获取日期更大的所有记录。我尝试了这个,但它确实有效:

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

如果我用它当前的日期替换NOW()。为什么?

5 个答案:

答案 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')技巧。