Мне нужно изменить временную часть 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
)
Любые подсказки, как решить эту ошибку и достичь описанных функций?
Было бы проще использовать функцию 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')
и т.д.
->set('start_time', 'CONCAT(DATE(start_at), " ", ?', $doctrine_article->start_time)
Но это привело к новой ошибке:Call to undefined method Doctrine_Query_Set::parseLiteralValue()
?
, Второе: если этого недостаточно, попробуйте->set('start_time', 'CONCAT(DATE(start_at), ?, ?)', array(' ', $doctrine_article->start_time))