使用Doctrine

时间:2015-07-09 15:37:20

标签: doctrine

我有以下问题:

实体具有经典创建/更新的时间戳字段,应设置为UTC中的当前时间戳。

在实体上,我使用columnDefinition属性将它们分别设置为"TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP""TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"(这不会导致实际具有TIMESTAMP字段(必须在迁移中更改它)。

问题:Doctrine一直为这些字段传递NULL值,但在服务器上“explicit_defaults_for_timestamp”处于活动状态,因此我没有获取默认值而是出错。

如果我在这些字段上允许NULL,那么我只是在DB中获得一个NULL值。

我不想使用DateTime,因为这些值是由PHP服务器设置的(我在另一个时区使用数据库服务器,两者都可能会改变)。我也不想以编程方式强制使用UTC,因为这样就可以让开发人员犯错误。基本上我真的想让mySQL做它的事情,并按照设计的目的自动插入DEFAULT_TIMESTAMP。

我需要做的就是说服Doctrine,而不是插入created = NULL,它应该只是跳过这个字段而不发送任何值。

有谁知道实现这个目标的方法?

谢谢!

2 个答案:

答案 0 :(得分:0)

从实体中删除这些列/属性,因此Doctrine不了解它们并且不会尝试为它们发送空值/空值。然后,要么有一个单独的(重复)实体,仅用于阅读目的,要么使用自定义水合器来检索这些值。不优雅,但这是一个学说问题。

答案 1 :(得分:0)

我们遇到了同样的问题,我们决定在存储库中创建自己的save方法,并为特定实体在preFlush上添加例外