cakephp: как заставить NOW () работать в условиях поиска? - PullRequest
5 голосов
/ 21 апреля 2010

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

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

Если я заменю СЕЙЧАС () на текущую дату, это сработает. Почему это?

Ответы [ 5 ]

24 голосов
/ 21 апреля 2010

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

TourDate.date >= 'NOW()'

Возможно, вам следует просто попробовать

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

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

3 голосов
/ 23 марта 2012

Если вы ищете способ сделать это с помощью PHP-функции вместо MySQL-функций, вам не нужно использовать подробный формат $conditions = array('begin >' => date('Y-m-d H:i:s')), MySQL понимает более короткую предустановку 'c' в PHP для date () для ISO 8601 даты с $conditions = array('begin >' => date('c')).

Мне нравится это для выполнения запросов типа 'begin >' => date('c', strtotime("+4 weeks")), который является очень читабельным кодом и отлично подходит для отладки, когда вы смотрите на SQL-запросы.

1 голос
/ 21 апреля 2010

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

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

0 голосов
/ 21 апреля 2010

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

0 голосов
/ 21 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...