Php symfony 2.1日期不';t在使用->;修改方法
我对Symfony 2.1和将日期持久化到数据库有问题。我使用PHP5.3。我的代码如下:Php symfony 2.1日期不';t在使用->;修改方法,php,symfony,doctrine,symfony-2.1,Php,Symfony,Doctrine,Symfony 2.1,我对Symfony 2.1和将日期持久化到数据库有问题。我使用PHP5.3。我的代码如下: public function moveAction() { $request = $this->getRequest(); $id = $request->get('id'); $daydelta = $request->get('daydelta'); $minutedelta = $request->g
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);
}
我已经转储了新的times值,它正确地更改了,但由于某些原因,它没有保存到数据库中。但是如果我将该值设置为new\DateTime,它就可以正常工作。对这种奇怪的行为有什么想法吗?我检查了你的代码。而你却错过了机会。只需在
flush()之前添加
希望这会有所帮助。我找到了解决办法。因为我一直在做参考书,所以条令没有看到变化。答案是克隆对象,然后修改它。下面是正确的代码:
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);
}
为什么不使用gedmo
timestable
条令扩展?它会随着事件监听器的持久化而自动运行。我不想保存当前日期,而是从日历中保存非常具体的日期。Timestable在这种情况下不适用。更新条目时不需要持久化。仅在创建新条目时才需要。
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);
}