Я пытаюсь получить все записи с датой, больше затем теперь. Я попробовал это, но это работа doeasnt:
$all_dates = $this->TourDate->find('all', array('conditions' => array('TourDate.date >=' => 'NOW()'), 'order' => array('TourDate.date ASC')));
Если я заменяю ТЕПЕРЬ () с текущей датой, она работает. Почему это?
Я не использую CakePHP
, но я почти уверен, что ваш 'NOW ()'
выполняет синтаксический анализ в строку и, наконец, вы получили что-то вроде
TourDate.date >= 'NOW()'
Может, вам стоит просто попробовать
array('TourDate.date >= NOW()')
только как значение, вместо того, чтобы разделять его на стиль key => value
?
Я считаю, что CakePHP удаляет любые SQL-подобные функции, чтобы предотвратить атаки SQL-инъекций. Как бы меня это ни раздражало, я тоже обычно использую трюк с датой ('Y-m-d H: i: s').
'conditions' => array ('TourDate.date> = NOW ()')
В противном случае, cakephp будет цитировать функцию NOW (), и mysql будет думать об этом как о строке.
HSZ правильный. Cake интерпретирует условие NOW ()
как строку 'NOW ()'
. Предоставление полного фрагмента кода SQL в ваших условиях будет работать, как предлагает hsz.
У вас может возникнуть соблазн использовать date ('Ymd H: i: s')
вместо NOW ()
(как я предложил в первой версии этого ответа) . Не делай этого! Как указывает hsz ниже, это предотвратит кэширование запроса.