我有以下问题:
实体具有经典创建/更新的时间戳字段,应设置为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,它应该只是跳过这个字段而不发送任何值。
有谁知道实现这个目标的方法?
谢谢!
答案 0 :(得分:0)
从实体中删除这些列/属性,因此Doctrine不了解它们并且不会尝试为它们发送空值/空值。然后,要么有一个单独的(重复)实体,仅用于阅读目的,要么使用自定义水合器来检索这些值。不优雅,但这是一个学说问题。
答案 1 :(得分:0)
我们遇到了同样的问题,我们决定在存储库中创建自己的save
方法,并为特定实体在preFlush
上添加例外