2012-09-15 51 views
-1

我試圖創建一個使用標準,推進了如下聲明:的Propel標準

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。我如何改變它以便它?我已經嘗試只更改BasesGuardUserProfilePeer.php中的LAST_ACTION的值,但它引發了錯誤。

+0

你爲什麼要這麼做?由於您不必要地應用函數,數據庫將無法使用任何索引來解決這部分查詢;您不需要使用UNIX時間戳修改日期。 '東西>東西 - INTERVAL 1800 SECOND'。當然,你的查詢是沒有意義的,因爲列不能大於自身... –

+0

什麼? :-) 查詢完美無缺 東西>東西 - 1800秒是現在和半小時之前的所有東西 – ldrocks

+0

不,每件東西都是1800'。所有的數字都大於他們自己減去其他數字。從現在到半小時前,「CURRENT_TIMESTAMP - 1800」將是每一行。 –

回答

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),而不是遷移到Query方法。