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 它就可以了。对于这种奇怪的行为有什么想法吗?

4

2 回答 2

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);
}
于 2012-12-11T19:42:42.433 回答
0

我检查了你的代码。你错过了坚持。只需在您之前添加flush()

$em->persist($entity);

希望它会有所帮助。

于 2012-12-11T09:26:37.540 回答