symfony 2.1 date在使用 - > modify方法后不会保留

时间:2012-12-10 12:07:05

标签: php symfony doctrine symfony-2.1

我遇到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就可以了。对这种奇怪行为的任何想法?

2 个答案:

答案 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);

希望它会有所帮助。