Doctrine修改的DateTime不会保留

时间:2017-04-06 15:53:58

标签: php symfony datetime doctrine-orm

我尝试使用modify函数

修改对象的DateTime字段
    $em = $this->getDoctrine()->getManager();
    $end = $session->getEndDate();
    $session->setEndDate($end->modify('+10 seconds'));
    $em->persist($session);
    $em->flush();

这是Session类中$ endDate字段的setter:

  /**
    * @param \DateTime $endDate
    */
   public function setEndDate(\DateTime $endDate)
   {
       $this->endDate = $endDate;
   }

为什么结束日期更改不能保留到数据库?

4 个答案:

答案 0 :(得分:6)

Doctrine不会保存对现有DateTime实例的更改(由于我认为PHP的等式测试的内部结构)

如果克隆对象然后将其设置回来,应该可以正常工作。或者在setter中克隆它?

请参阅Doctrine2 ORM does not save changes to a DateTime field

答案 1 :(得分:5)

你需要冲洗它:

$em->flush($session);

持久性仅适用于尚未创建的实体。

更新:

modify方法不返回任何内容,影响指定对象实例,因此您只需尝试:

$end = $session->getEndDate();
$end->modify('+10 seconds');
$em->flush();

希望这个帮助

答案 2 :(得分:1)

您需要添加合并或刷新以保存更新

 $end = $session->getEndDate();
 $session->setEndDate($end->modify('+10 seconds'));
 $em->persist($session);
 $em->flush();

答案 3 :(得分:0)

基于@Cerad的评论,我想知道这是否适合你:

$em = $this->getDoctrine()->getManager();
$end = new \DateTime( $session->getEndDate() );
$end->modify('+10 seconds');
$session->setEndDate( $end );
$em->persist($session);
$em->flush();

你可以尝试一下吗?我不确定它会有所作为。