Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony 2.1日期不';t在使用->;修改方法_Php_Symfony_Doctrine_Symfony 2.1 - Fatal编程技术网

Php symfony 2.1日期不';t在使用->;修改方法

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

我对Symfony 2.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);
    }

我已经转储了新的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);
}