Как в Doctrine ORM суммировать секунды в поле отметки времени? - PullRequest
0 голосов
/ 02 марта 2010

У меня есть поле starts_at, в котором хранится метка времени с момента начала чего-либо. Кроме того, у меня есть другое поле seconds_long, которое представляет количество секунд, в течение которых длится событие.

Мне нужно выбрать все незаконченные события, но я просто не могу найти способ суммировать поля starts_at и seconds_long. Сначала я попытался суммировать их, ожидая, что Доктрина сотворит магию, но это не сработало:

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

К сожалению, это не работает. Затем я попытался преобразовать поле starts_at в секунды UNIX, но не нашел функции SQL, которая работала бы в sqlite и MySQL.

Есть ли способ сделать это? Как?

Ответы [ 3 ]

1 голос
/ 02 марта 2010

Вероятно, есть более простой способ сделать это, но как насчет установки полей, которые у вас есть, как "sets_at" и "EndSAT" - обе метки времени.

Затем вы можете получить разницу с вычитанием: Start_at - End_at>?.

0 голосов
/ 15 марта 2010

Я думаю, что невозможно сделать запрос, который работает как с SQLite, так и с MySQL. ORM может сделать множество вещей независимыми от базы данных, но нет способа перевести вашу задачу на SQLite и MySQL.

То, что вы должны сделать в первую очередь, упростит идею задачи. Сделайте что-нибудь в PHP, чтобы вам не пришлось строить запрос так, как вы делаете; или измените структуру базы данных.

0 голосов
/ 04 марта 2010

Это должно сработать, но я не проверял.

В вашем классе "Учебная запись"

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(); 
}
...