我可以在Doctrine中创建只读时间戳字段吗?

时间:2017-05-09 16:45:26

标签: symfony doctrine

我按照这个问题创建了时间戳,节省了数据库维护的创建和更新:Doctrine2 - Type timestamp - Default value 问题是,现在我得到一个"值不能为空"使用Doctrine保存记录时。我在生成的插入中看到它试图将时间戳保存为null。有没有办法避免Doctrine在INSERT / UPDATE上设置列。

1 个答案:

答案 0 :(得分:0)

为什么要让DB做Doctrine工作?

如果您没有映射,则Doctrine根本不会设置专栏。但是你会看看Timestampable extension吗?

另一种方法是使用Doctrine entity listeners。因此,您可以在PrePersistPreUpdate上创建自己的,并在那里设置时间。

如果您担心更改日期的设置者,您至少可以使用该字段的动态映射(只需在实际需要更改它们时即时映射日期时间属性)。不确定您是否可以使用反射,因为您的实体可以在代理类之后。

如果您仍希望在数据库中保留业务逻辑,则只能映射您真正想要更改的字段(而不是您的案例中的日期时间字段),然后编写自定义Doctrine hydrator(只需扩展其AbstractHydrator类)将填充您需要的所有字段(包括日期时间)。您也可以将新的保温器配置为默认值(即在config.yml的Doctrine配置部分中),因此无需任何调整即可使用。