【发布时间】:2016-02-24 21:19:28
【问题描述】:
我在控制器中的一项操作有问题。我想更改一个对象的一个属性(小广告的发布日期)。
我从存储库中获得了一个特定的小广告,更改了属性的值,然后实体管理器应该保留该对象。这适用于其他一些属性,但不适用于日期 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'));
}
【问题讨论】:
-
只是一个小提示 - 在这种情况下您不需要
persist(),因为您正在处理一个已经被管理的实体,因为您使用findOneBy()方法检索了它。您还可以使用$smalladd = $repository->find($id);缩短您的findOneBy()命令,只要您将$id定义为实体上的主要Id值。
标签: symfony doctrine-orm entitymanager