сравнивая DateTime в CakePHP - PullRequest
4 голосов
/ 01 марта 2011

У меня есть запрос в CakePHP, у которого есть сохраненное поле «datetime», которое называется DropIn.drop_in_time.Я хотел бы только "найти" записи, где DropIn.drop_in_time is > NOW(), но у меня возникли проблемы с его получением.

Условие DropIn.drop_in_time >' => 'NOW() не дает правильных результатов в запросе ниже.Есть ли лучший способ сделать это?

$requests = $this->DropIn->find('all', array(
            'conditions' => array('DropIn.drop_in_time >' => 'NOW()', 'or' => array(array('DropIn.user_id' => $this->Auth->user('id')), array('DropIn.id' => $drop_in_ids))),
            'order'=>array('DropIn.created'=>'DESC')));

Ответы [ 3 ]

9 голосов
/ 01 марта 2011

Если вы разделяете значение как 'DropIn.drop_in_time' => 'NOW()', 'NOW()' берется в качестве строки буквального значения "NOW()".Просто запишите его как один фрагмент SQL: 'DropIn.drop_in_time > NOW()'.Или используйте 'DropIn.drop_in_time >' => date('Y-m-d H:i:s').

0 голосов
/ 18 декабря 2012

использовать DboSource :: expression ('NOW') вместо только NOW ()

0 голосов
/ 01 марта 2011

Если вы действительно хотите поместить выражения DB в находки CakePHP, вы можете использовать метод выражений:

'DropIn.drop_in_time.' => $db->expression('CURDATE()'); 

Тем не менее, это своего рода потеря точки абстракции базы данных, которую обеспечивает фреймворк, поэтому сделайте так, как предлагает deceze, и сравните ее с date('Y-m-d H:i:s')

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