cakephp: как сделать ТЕПЕРЬ (), работают в условии поиска?

Я пытаюсь получить все записи с датой, больше затем теперь. Я попробовал это, но это работа doeasnt:

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

Если я заменяю ТЕПЕРЬ () с текущей датой, она работает. Почему это?

5
задан kaklon 20 April 2010 в 21:21
поделиться

4 ответа

Я не использую CakePHP , но я почти уверен, что ваш 'NOW ()' выполняет синтаксический анализ в строку и, наконец, вы получили что-то вроде

TourDate.date >= 'NOW()'

Может, вам стоит просто попробовать

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

только как значение, вместо того, чтобы разделять его на стиль key => value ?

24
ответ дан 18 December 2019 в 06:02
поделиться

Я считаю, что CakePHP удаляет любые SQL-подобные функции, чтобы предотвратить атаки SQL-инъекций. Как бы меня это ни раздражало, я тоже обычно использую трюк с датой ('Y-m-d H: i: s').

-1
ответ дан 18 December 2019 в 06:02
поделиться

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

В противном случае, cakephp будет цитировать функцию NOW (), и mysql будет думать об этом как о строке.

1
ответ дан 18 December 2019 в 06:02
поделиться

HSZ правильный. Cake интерпретирует условие NOW () как строку 'NOW ()' . Предоставление полного фрагмента кода SQL в ваших условиях будет работать, как предлагает hsz.

У вас может возникнуть соблазн использовать date ('Ymd H: i: s') вместо NOW () (как я предложил в первой версии этого ответа) . Не делай этого! Как указывает hsz ниже, это предотвратит кэширование запроса.

0
ответ дан 18 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: