Symfony时间字段不使用与相应实体属性相同的日期

时间:2015-06-06 18:35:46

标签: php symfony datetime doctrine-orm doctrine

我有一个duration属性的实体,声明为time类型:

/* @ORM\Column(type="time") */
private $duration;

在我的Symfony表单中,此持续时间属性映射到time字段:

$builder->add(
    'duration',
    'time',
    [
        'input'  => 'datetime',
        'widget' => 'text'
    ]
)

由于PHP中不存在time类型,因此它们都在内部使用DateTime对象,因此需要添加(发明)日期。

我的问题是他们似乎没有使用相同的日期:

  • 从数据库中提取的15mn被视为1970-01-01 00:15:00
  • 表格提交的15mn被视为2015-06-06 00:15:00(即今天的日期)

结果:Doctrine总是认为时间已经改变,并且总是执行SQL更新。

解决此问题的最有效方法是什么?

2 个答案:

答案 0 :(得分:0)

我猜您可以在实体的构造函数中将datetime设置为1970-01-01 00:00:00

public function __construct()
{
    $this->duration = new \DateTime('1970-01-01 00:00:00');
}

答案 1 :(得分:0)

解决方案在于setDuration() setter,因为Doctrine和Symfony都使用它来设置持续时间。只是不要更新整个DateTime对象,只更新它的时间部分:

public function setDuration(\DateTime $duration)
{
    $this->duration->setTime(
        $duration->format('G'),
        $duration->format('i'),
        $duration->format('s')
    );

    return $this;
}