我有一个duration
属性的实体,声明为time
类型:
/* @ORM\Column(type="time") */
private $duration;
在我的Symfony表单中,此持续时间属性映射到time
字段:
$builder->add(
'duration',
'time',
[
'input' => 'datetime',
'widget' => 'text'
]
)
由于PHP中不存在time
类型,因此它们都在内部使用DateTime
对象,因此需要添加(发明)日期。
我的问题是他们似乎没有使用相同的日期:
1970-01-01 00:15:00
2015-06-06 00:15:00
(即今天的日期)结果:Doctrine总是认为时间已经改变,并且总是执行SQL更新。
解决此问题的最有效方法是什么?
答案 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;
}