Почему вы создаете отдельные Criterion
объекты?
$start_date = mktime(0, 0, 0, date("m") , date("d")+$start, date("Y"));
$end_date = mktime(0, 0, 0, date("m") , date("d")+$end, date("Y"));
$c = new Criteria();
$c->add(TaskPeer::DUE_DATE, $end_date, Criteria::LESS_EQUAL);
$c->addAnd(TaskPeer::DUE_DATE, $start_date, Criteria::GREATER_EQUAL);
$c->addAnd(TaskPeer::DUE_DATE, null, Criteria::ISNOTNULL);
Когда я пробую это в Propel 1.2, 1.3 или 1.4, я получаю следующий оператор SQL:
SELECT task.TASK_ID, task.DUE_DATE FROM task WHERE ((task.DUE_DATE<=:p1 AND task.DUE_DATE>=:p2) AND task.DUE_DATE IS NOT NULL )
Метод $c->add()
заменяет текущий критерий для данного поля.Вы создаете свои критерии для TaskPeer::DUE_DATE
, поэтому они всегда заменят предыдущие.