1

Symfony2.1とデータベースへの日付の保持に問題があります。私はPHP5.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 に答える