Symfony 实体管理器:持久化和#x27;无法工作,没有错误消息

Symfony 实体管理器:持久化和#x27;无法工作,没有错误消息,symfony,doctrine-orm,entitymanager,Symfony,Doctrine Orm,Entitymanager,我在控制器中的一个操作有问题。我想更改对象的一个属性(小广告的发布日期) 我从存储库中获得一个特定的小广告,更改属性的值,然后实体管理器应该持久化该对象。这适用于其他一些属性,但不适用于日期validTo 我现在的问题是,我没有收到任何错误消息。当我将每个步骤的值写入日志文件时,它具有正确的值。即使我在$em->flush()方法之后通过$smallad->getValidTo()获取属性(为了缩短代码,我删除了所有日志记录行)。但是,我在数据库中没有得到任何更改,并且该值也不会持久化 我使用这

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

我从存储库中获得一个特定的小广告,更改属性的值,然后实体管理器应该持久化该对象。这适用于其他一些属性,但不适用于日期
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'));
}

原则2使用对象引用来检测日期属性何时已更改,因此需要更新数据库:

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

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

原则2使用对象引用来检测日期属性何时已更改,因此需要更新数据库:

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

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

只是一个小提示-在本例中,您不需要使用
persist()
,因为您正在处理一个已被管理的实体,因为您使用
findOneBy()
方法检索它。您还可以使用
$smalladd=$repository->find($id)缩短
findOneBy()
命令
只要您在实体上定义了
$id
作为您的主
id
值。只需一个小提示-在这种情况下,您不需要
persist()
,因为您使用
findOneBy()
方法检索了一个已被管理的实体。您还可以使用
$smalladd=$repository->find($id)缩短
findOneBy()
命令只要你有<代码> $ID<代码>定义为你的实体上的主<代码> ID>代码>值。如果使用PHP>=5.5,最好考虑使用<代码> DATITEMIOMIVENT/<代码>。我还没有用它来测试它,但是这里似乎有一个支持它的库——如果使用PHP>=5.5,那么最好考虑使用<代码> DATITEMIOMIVENT/<代码>。我还没有用条令来测试它,但这里似乎有一个库添加了对它的支持-