在Doctrine ORM中,如何将秒数与时间戳字段相加?

时间:2010-03-02 17:29:34

标签: sql datetime select doctrine unix-timestamp

我有一个starts_at字段,可以保存时间戳开始的时间戳。此外,我还有另一个字段seconds_long,表示事件持续的秒数。

我需要选择所有未完成的事件,但我找不到对starts_atseconds_long字段求和的方法。我首先尝试总结它们,期待Doctrine做一些魔术,但它不起作用:

addWhere("c.starts_at + c.seconds_long > ?", date('Y-m-d H:i:s', time()));

不幸的是,这不起作用。然后,我尝试将starts_at字段转换为UNIX秒,但我没有找到在sqlite和MySQL中工作的SQL函数。

有办法做到这一点吗?怎么样?

3 个答案:

答案 0 :(得分:1)

可能有一种更简单的方法可以做到这一点,但是如何设置你的字段为“starts_at”和“ends_at” - 两者都是时间戳。

然后你可以通过减法获得差异:starts_at - ends_at> ?

答案 1 :(得分:0)

这应该可以,但我没有测试它。

在你的学说记录课

function findFinishedOccurances()
{
    $this->getTable()-
         ->createQuery()
         ->select("c.*, DATE_ADD(c.starts_at, INTERVAL c.seconds_long SECOND) AS c.finished_at")
         ->where("c.finished_at >= ?", date('Y-m-d H:i:s', time()))
         ->execute(); 
}

答案 2 :(得分:0)

我认为不可能进行适用于SQLite和MySQL的查询。 ORM可以使很多东西数据库独立,但没有办法将你的任务转换为SQLite和MySQL。

首先应该做些什么来简化任务的想法。在PHP中执行某些操作以防止您必须按照自己的方式构建查询;或更改数据库结构。