我按照这个问题创建了时间戳,节省了数据库维护的创建和更新:Doctrine2 - Type timestamp - Default value 问题是,现在我得到一个"值不能为空"使用Doctrine保存记录时。我在生成的插入中看到它试图将时间戳保存为null。有没有办法避免Doctrine在INSERT / UPDATE上设置列。
答案 0 :(得分:0)
为什么要让DB做Doctrine工作?
如果您没有映射,则Doctrine根本不会设置专栏。但是你会看看Timestampable extension吗?
另一种方法是使用Doctrine entity listeners。因此,您可以在PrePersist
和PreUpdate
上创建自己的,并在那里设置时间。
如果您担心更改日期的设置者,您至少可以使用该字段的动态映射(只需在实际需要更改它们时即时映射日期时间属性)。不确定您是否可以使用反射,因为您的实体可以在代理类之后。
如果您仍希望在数据库中保留业务逻辑,则只能映射您真正想要更改的字段(而不是您的案例中的日期时间字段),然后编写自定义Doctrine hydrator(只需扩展其AbstractHydrator类)将填充您需要的所有字段(包括日期时间)。您也可以将新的保温器配置为默认值(即在config.yml的Doctrine配置部分中),因此无需任何调整即可使用。