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


Symfony time field not using the same date as the corresponding entity property

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

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

在Symfony表单中,这个持续时间属性映射到time字段:

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

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

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

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

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

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

我猜你可以在实体的构造函数中设置日期时间为1970-01-01 00:00:00

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

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

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