我遇到Symfony 2.1的问题并将日期保存到数据库。我使用PHP 5.3。我的代码如下:
public function moveAction()
{
$request = $this->getRequest();
$id = $request->get('id');
$daydelta = $request->get('daydelta');
$minutedelta = $request->get('minutedelta');
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MedSystemTimetableBundle:Appointment')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Appointment entity.');
}
if (0 != $daydelta) {
$day = ($daydelta > 0) ? '+'.$daydelta : $daydelta;
$day .= (abs($daydelta) == 1) ? ' day' : ' days';
$modifyFrom = $entity->getTimeFrom()->modify($day);
$modifyTo = $entity->getTimeTo()->modify($day);
$entity->setTimeFrom($modifyFrom);
$entity->setTimeTo($modifyTo);
}
if (0 != $minutedelta) {
$month = ($minutedelta > 0) ? '+'.$minutedelta : $minutedelta;
$month .= (abs($minutedelta) == 1) ? ' minute' : ' minutes';
$modifyFrom = $entity->getTimeFrom()->modify($month);
$modifyTo = $entity->getTimeTo()->modify($month);
$entity->setTimeFrom($modifyFrom);
$entity->setTimeTo($test);
}
$em->flush();
return new Response('ok', 200);
}
我已经转储了新的时间值并且它正确地更改了,但由于某种原因它不会保存到数据库。但是如果我将值设置为new \ DateTime就可以了。对这种奇怪行为的任何想法?
答案 0 :(得分:2)
我找到了解决方案。由于我一直在研究参考文献,因此该学说没有看到变化。答案是克隆对象,然后修改它。这是正确的代码:
public function moveAction()
{
$request = $this->getRequest();
$id = $request->get('id');
$daydelta = $request->get('daydelta');
$minutedelta = $request->get('minutedelta');
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MedSystemTimetableBundle:Appointment')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Appointment entity.');
}
if (0 != $daydelta) {
$day = ($daydelta > 0) ? '+'.$daydelta : $daydelta;
$day .= (abs($daydelta) == 1) ? ' day' : ' days';
$modifyFrom = clone $entity->getTimeFrom();
$modifyTo = clone $entity->getTimeTo();
$entity->setTimeFrom($modifyFrom->modify($day));
$entity->setTimeTo($modifyTo->modify($day));
}
if (0 != $minutedelta) {
$month = ($minutedelta > 0) ? '+'.$minutedelta : $minutedelta;
$month .= (abs($minutedelta) == 1) ? ' minute' : ' minutes';
$modifyFrom = clone $entity->getTimeFrom();
$modifyTo = clone $entity->getTimeTo();
$entity->setTimeFrom($modifyFrom->modify($month));
$entity->setTimeTo($test)->modify($month);
}
$em->flush();
return new Response('ok', 200);
}
答案 1 :(得分:0)
我检查了你的代码。你错过了坚持。只需在flush()
$em->persist($entity);
希望它会有所帮助。