Как изменить часть времени значения datetime с доктриной?

0

Мне нужно изменить временную часть datetime в базе данных.

Что я получил в базе данных: '2010-01-01 01:00:00' Мне нужно обновить это до '2010-01-01 03:00:00' Единственное, что у меня есть, это '03: 00: 00 '

Поскольку я использую доктрину, я мог бы перебирать все объекты, но это уменьшало бы производительность. Так что я пытался:

$q = Doctrine_Query::create()
                ->update('Something s')
                ->set('start_at', 'DATEADD(DATESUB(start_at,HOUR_SECOND TIME(start_at)), HOUR_SECOND ?)', $doctrine_article->start_time)
                ->set('start_at', 'DATEADD(DATESUB(end_at,HOUR_SECOND TIME(end_at)), HOUR_SECOND ?)', $doctrine_article->end_time)
                ->where('s.some_id = ?',$doctrine_article->id)
                ->andWhere('s.start_at > ?',$current_date)
                ->execute();

(Обновление)
Объяснить немного больше:
Я попытался удалить временную часть текущего Datetime, поэтому я получаю "2010-01-01 00:00:00", а затем добавляю к этому заданное время ('03: 00: 00 '), поэтому в конце он должен быть желаемым '2010-01-01 03:00:00'

Но это приводит к ошибке (1064 You have an error in your SQL syntax)

Любые подсказки, как решить эту ошибку и достичь описанных функций?

Теги:
datetime
doctrine

1 ответ

1
Лучший ответ

Было бы проще использовать функцию DATE для удаления временной части. После этого вы можете использовать разные способы добавления времени снова:

start_at = DATE(start_at) + INTERVAL 3 HOUR

start_at = DATE(start_at) + INTERVAL 10800 SECOND

start_at = CONCAT(DATE(start_at), ' ', '03:00:00')

и т.д.

  • 0
    пытался сделать это таким образом: ->set('start_time', 'CONCAT(DATE(start_at), " ", ?', $doctrine_article->start_time) Но это привело к новой ошибке: Call to undefined method Doctrine_Query_Set::parseLiteralValue()
  • 1
    Первое: вы забыли закрывающую скобку после ? , Второе: если этого недостаточно, попробуйте ->set('start_time', 'CONCAT(DATE(start_at), ?, ?)', array(' ', $doctrine_article->start_time))
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню