0

我有一个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 函数。

有没有办法做到这一点?如何?

4

3 回答 3

1

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

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

于 2010-03-02T18:26:31.353 回答
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(); 
}
于 2010-03-04T07:28:02.473 回答
0

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

您应该首先简化任务的想法。在 PHP 中做一些事情来防止你必须按照你正在做的方式构建查询;或更改数据库结构。

于 2010-03-15T11:02:21.227 回答