2010-05-04 5 views
2

Propel을 사용하여 null이 아니며 특정 범위 사이의 날짜 필드가있는 레코드를 찾고 싶습니다.날짜가 Propel에서 null이 아닌 날짜 범위 선택

N.B. 불행히도 이것이 더 큰 쿼리의 일부이기 때문에 여기서 사용자 지정 SQL 쿼리를 사용할 수는 없습니다. 예를 들어

:

--------------------- 
| ID | DUE_DATE  | 
--------------------- 
| 1 | NULL  | 
| 2 | 01/01/2010 | 
| 3 | 02/01/2010 | 
| 4 | NULL  | 
| 5 | 05/01/2010 | 
--------------------- 

내가 01/01/2010과 2010년 2월 1일 사이 DUE_DATE 모든 행을 반환 할 수 있습니다하지만 난 돈 ':이 같은 기록을 가질 수있다 due_date가 NULL 인 레코드를 반환하려고합니다. 난 단지 그러나 행 2

3. 반환 할 예에서

이 추진 내 NOTNULL 기준을 덮어 쓸 것으로 보인다.

Propel에서이 작업을 수행 할 수 있습니까?

감사!

답변

4

왜 별도의 Criterion 객체를 만들려면 어떻게해야합니까? 나는이 추진 1.2, 1.3 또는 1.4 때

$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); 

, 나는 다음과 같은 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에 대한 기준을 작성하므로 항상 이전 기준을 대체합니다.

+0

Ok - 아마도 Propel 1.4로 업그레이드 할 필요가 있습니다. 귀하의 답변에 감사드립니다. –

+0

내가 추진 1.2 및 1.3에서이 테스트 다시, 나는 같은 결과를 얻을 수 있습니다. 당신이 업그레이드 할 수있는 동안 그래서, 당신이없는 (어쩌면 지금 1.5을 선택, 그것은 안정 및 쿼리 작성 훨씬 좋네요). –

+0

환상적. 돌아가서 저를 위해 시험해 줘서 고마워요. 오늘 저녁까지이 문제를 다시 볼 기회가 없을 것입니다. –

2

null 항목을 제거하지 못했습니다. 부분이 생성됩니다. tasks.due_date IS NULL AND tasks.due_date IS NULL이 생성됩니다.

어쨌든, 어쩌면 당신은 WHERE 절 원시 SQL을 작성하는 Criteria::CUSTOM를 사용할 수 있습니까? 추진 documentation에서 예 :

$con = Propel::getConnection(ReviewPeer::DATABASE_NAME); 

$c = new Criteria(); 
$c->add(ReviewPeer::REVIEW_DATE, 'to_date('.ReviewPeer::REVIEW_DATE.', \'YYYY-MM-DD\') = '.$con->quote($date->format('Y-m-d'), Criteria::CUSTOM); 
+0

답장을 보내 주셔서 감사합니다. 불행히도 커스텀 SQL은 더 큰 쿼리의 일부이므로 수행중인 작업으로는 불가능합니다. –