我有一个starts_at
字段,可以保存时间戳开始的时间戳。此外,我还有另一个字段seconds_long
,表示事件持续的秒数。
我需要选择所有未完成的事件,但我找不到对starts_at
和seconds_long
字段求和的方法。我首先尝试总结它们,期待Doctrine做一些魔术,但它不起作用:
addWhere("c.starts_at + c.seconds_long > ?", date('Y-m-d H:i:s', time()));
不幸的是,这不起作用。然后,我尝试将starts_at
字段转换为UNIX秒,但我没有找到在sqlite和MySQL中工作的SQL函数。
有办法做到这一点吗?怎么样?
答案 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中执行某些操作以防止您必须按照自己的方式构建查询;或更改数据库结构。