2012-09-15 4 views
-1

나는 기준 및 추진 사용하여 다음 문 만들려고 해요 :추진 기준

AND unix_timestamp(table.last_action) > unix_timestamp(table.last_action) -1800 

을하지만 지금

$kriterien->add(sfGuardUserProfilePeer::LAST_ACTION, 'unix_timestamp(table.last_action)-90', Criteria::GREATER_THEN); 

sfGuardUserProfilePeer::LAST_ACTION

가없는 나는 그것을 얻을 수있을 것 같지 않습니다 unix_timestamp. 나는 그것을 어떻게 바꿀 수 있습니까? 이미 LAST_ACTION의 값을 BasesGuardUserProfilePeer.php으로 변경하려고 시도했지만 오류가 발생했습니다.

+0

왜이 작업을 원하십니까? 데이터베이스는 불필요하게 함수를 적용하기 때문에이 부분을 해결하기 위해 인덱스를 사용할 수 없습니다. UNIX 시간 소인을 사용하여 날짜를 수정할 필요가 없습니다. '뭔가 무언가 - INTERVAL 1800 SECOND'. 물론, 당신의 쿼리는 의미가 없습니다. 칼럼 자체가 커질 수는 없기 때문입니다 ... –

+0

무엇? :-) 쿼리가 완벽하게 작동합니다. 뭔가> 무언가 - 지금부터 30 분 전까지 1800 초가 걸립니다. – ldrocks

+0

아니요, 'something> something - 1800'이 모든 행입니다. 모든 수는 다른 수를 뺀 것보다 큽니다. 'something> CURRENT_TIMESTAMP - 1800'은 지금부터 30 분 전까지의 모든 행이 될 것입니다. –

답변

0

Criteria::GREATER_THEN과 같은 상수가 없습니다. 아마도 Criteria::GREATER_THAN을 의미할까요? 그러나 이것을 사용하는 경우 add()의 두 번째 매개 변수는 문자열 또는 정수 값이어야합니다. 열 이름이나 SQL 함수를 사용하려고하면 작동하지 않습니다.

대신,이 시도 (분명히 당신은 조정할 필요가 있습니다 - 내가 정확히 무엇을 달성하고자하는 확실하지 않다) :

$kriterien->add(
    sfGuardUserProfilePeer::LAST_ACTION, 
    'unix_timestamp(sf_guard_user_profile.last_action) > 90', 
    Criteria::CUSTOM 
); 

마지막으로, Criteria 접근 방식은 더 이상 사용되지됩니다. 당신은 Propel의 어떤 버전을 사용하고 있는지 (그리고이 질문은 당신의 질문에 있어야 함) 말하지 않지만, 최근의 (1.5 또는 1.6) 무언가를 사용하고 대신 쿼리 접근법으로 옮기는 것이 좋습니다.