我有一个具有duration
属性的实体,声明为time
类型:
/* @ORMColumn(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;
}