CakePHP найти по диапазону дат?

Я пытаюсь получить купоны, срок действия которых еще не истек. У меня есть это в моем контроллере:

public function coupons() {
    $this->paginate['Coupon']=array(
        'limit'=>9,
        'order'=>'RAND()',
        'conditions'=>array(
        'Coupon.end_date'=>??????)
    );
    $c=$this->paginate('Coupon');
    $this->set('allcoupons', $c);
}

Мне нужно, чтобы вернуть все записи, срок действия которых не истек на сегодняшний день. end_date имеет формат DATE. Я не знаю, как попросить торт посмотреть на end_date и сравнить его с сегодняшним днем, И сделать это внутри метода paginate.


person huzzah    schedule 19.01.2012    source источник


Ответы (2)


Вам просто нужно правильно отформатировать дату

'Coupon.end_date >' => date('Y-m-d H:i:s')
person Nathan Gaskin    schedule 19.01.2012
comment
Значит, знак «больше» помещается в одинарные кавычки? - person huzzah; 20.01.2012
comment
Да, для любой операции сравнения в запросе CakePHP оператор входит в ключ. :) - person Nathan Gaskin; 20.01.2012

Вероятно, вам нужно использовать помощник времени. функция dayAsSql в вашем контроллере, чтобы у вас было что-то вроде

public function coupons() {
    $expire_interval = "3 days";
    $this->paginate['Coupon'] = array(
        ...
        'conditions' => 
            ## called via TimeHelper
            $this->Time->dayAsSql($this->Time->fromString($expire_interval), 'end_date')
        )
    );
    ....
}
person matt    schedule 12.03.2013
comment
Материал TimeHelper был перемещен в класс Lib в Utility для более чистого доступа к MVC внутри моделей и т. д. Так что ваш ответ не совсем правильный. - person mark; 12.03.2013
comment
Это правда (и его использование также показано при вызове CakeTime из модели по предоставленной ссылке), но я основывал свой ответ на этот вопрос на заданном вопросе. ...срок действия еще не истек. У меня есть это в моем контроллере: я не пытался принизить кого-то в Интернете, скорее, моя цель состояла в том, чтобы помочь им решить их проблему и предоставить что-то полезное для других, которые могут наткнуться на этот вопрос. - person matt; 12.03.2013
comment
Проблема уже была решена год назад (если вы посмотрите на временные метки). Вы только что добавили неверную информацию к устаревшему вопросу здесь. Тогда вы могли бы по крайней мере использовать правильный класс (CakeTime). PS: вам также нужно будет правильно включить его - используя App::uses(). - person mark; 12.03.2013