我尝试了以下yaml代码:
columns:
created_time:
type: timestamp
notnull: true
default: default CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
在输出的sql语句中,该字段被视为datetime而不是timestamp,我无法在其中定义当前时间戳...
如果我坚持使用时间戳来存储当前时间,那么如何在yaml中这样做?
环顾了一会后,我仍然找不到让数据库服务器插入 CURRENT_TIMESTAMP 的方法(作为默认值 on INSERT)。
问题:当您将对象持久保存到数据库时,Doctrine 将丢失的字段显式设置为 NULL。所以看起来,在表定义中设置默认值,根本没有任何影响:-(
我不想通过 PHP(例如$object->setTimestamp(new \DateTime());)设置时间,因为这可能返回与数据库服务器不同的时间,如下所述:https : //stackoverflow.com/a/3705090/1668200
到目前为止我尝试过的:
按NOW字面意思发送(例如$object->setTimestamp('NOW()');),如下所述:https : //stackoverflow.com/a/13850741/1668200
=> 没用:Error: Call to a member function format() on string
在持久化对象之前从对象中删除 'timestamp' 属性(参见/sf/answers/252053091/)也不起作用:无论如何,该字段被 Doctrine 设置为 NULL。
我发现的任何其他解决方案(包括 Doctrine 扩展“Timestampable” https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/timestampable.md)都使用 PHP 的时间。