2012-09-15 52 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方法。