entitymanager:坚持不工作,没有错误信息

entitiy manager: persist doesn't work, no error message

我在控制器中的一项操作有问题。我想更改对象的一个​​属性(小广告的发布日期)。

我从存储库中获取了一个特定的小广告,更改了属性的值,然后实体管理器应该保留该对象。这适用于其他一些属性,但不适用于日期 validTo.

我现在的问题是,我没有收到任何错误消息。当我将每个步骤的值写入日志文件时,它具有正确的值。即使我在 $em->flush() 方法之后通过 $smallad->getValidTo() 获取属性(为了缩短代码,我删除了所有日志记录行)。但是我没有在数据库中得到任何更改,并且该值没有保留。

我使用这种动作控制器来更改其他几个控制器中的一些属性的单个值,没有任何问题。如果没有正确的错误消息,我不知道从哪里开始寻找解决方案。有什么想法吗?

public function extendAction($id)
{
    $repository = $this->getDoctrine()->getRepository('AppBundle:SmallAd');
    $smallad = $repository->findOneBy(array('id'=>$id));

    $em = $this->getDoctrine()->getManager();
    $date = $smallad->getValidTo()->modify('+31 days');
    $smallad->setValidTo($date);
    $em->persist($smallad);
    $em->flush();

    return new RedirectResponse($this->generateUrl('member'));
}

Doctrine 2 使用对象引用来检测日期 属性 何时更改,因此需要更新数据库:http://doctrine-orm.readthedocs.org/en/latest/cookbook/working-with-datetime.html

这有点违反直觉。您更新了日期但保留了相同的日期对象,因此没有变化。通过克隆日期很容易修复:

$date = $smallad->getValidTo()->modify('+31 days');
$smallad->setValidTo(clone $date);