遵循Doctrine准则,我了解如何为实体设置默认值,但如果我想要日期/时间戳怎么办?
我的问题是我的数据库在字段上有一个默认的NOW()但是当我使用Doctrine插入记录时,值为null或空白但插入的其余部分发生了.
此外,由于Doctrine声称将默认值声明为const,这也会产生问题.
建议?
我正在寻找一种使用TIMESTAMP而不是DATETIMEMySql 来制作学说的方法.
另外我需要设置ON UPDATE CURRENT_TIMESTAMP和CURRENT_TIMESTAMP默认值.
我希望有可能在PHP注释中包含所有这些代码,将所有内容放在一个中心位置.
我怎样才能做到这一点?
环顾了一会后,我仍然找不到让数据库服务器插入 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 的时间。