条令:将当前_时间戳设置为数据库的默认值(即不是PHP)
在四处查看了一段时间后,我仍然找不到一种方法来获取数据库服务器插入的当前\u时间戳作为插入时的默认值 问题是:当您将一个对象持久化到数据库中时,丢失的字段会根据规则显式设置为NULL。因此,在表定义中设置默认值似乎根本没有任何效果:- 我不想通过PHP设置时间,例如$object->setTimestampnew\DateTime;原因这可能返回与数据库服务器不同的时间,如下所述: 到目前为止,我所尝试的: 立即发送,例如$object->setTimestamp'NOW';,如下文所述: =>无效:错误:调用字符串上的成员函数格式 在持久化之前从对象中删除“timestamp”属性(请参见)也不起作用:无论如何,该字段都被Doctrine设置为NULL 我发现的任何其他解决方案,包括条令扩展“timestable”,都使用PHP的时间。看看这个:它应该解决错误问题:调用字符串上的成员函数格式并强制将SQL立即发送到数据库。看看这个:它应该解决错误问题:调用成员函数格式化字符串并强制SQL立即发送到数据库。更新:这与VasekPurchart\DoctrineDateTimeImmutableTypesBundle不再兼容。而且它不适用于DBAL2.6。看 总而言之,这里有一个逐步的说明: 1创建一个新类DateTimeNow;一个好的位置可能是AppBundle/Entity/DateTimeNow.php: 3将此函数注册为生命周期回调前置器。有关注释,请参见。对于YAML:条令:将当前_时间戳设置为数据库的默认值(即不是PHP),php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,在四处查看了一段时间后,我仍然找不到一种方法来获取数据库服务器插入的当前\u时间戳作为插入时的默认值 问题是:当您将一个对象持久化到数据库中时,丢失的字段会根据规则显式设置为NULL。因此,在表定义中设置默认值似乎根本没有任何效果:- 我不想通过PHP设置时间,例如$object->setTimestampnew\DateTime;原因这可能返回与数据库服务器不同的时间,如下所述: 到目前为止,我所尝试的: 立即发送,例如$object->setTimestamp'NOW';,如下文所述: =>
AppBundle\Entity\Whatever:
# ...
lifecycleCallbacks:
prePersist: [ doPrePersist ]
就这样-
现在,当您持久化一个空对象时,这就是结果查询:
INSERT INTO public.whatever(id, text, timestamp) VALUES (?, ?, ?)
Parameters: { 1: null, 2: null, 3: NOW() }
更新:这与VasekPurchart\DoctrineDateTimeImmutableTypesBundle不再兼容。而且它不适用于DBAL2.6。看
总而言之,这里有一个逐步的说明:
1创建一个新类DateTimeNow;一个好的位置可能是AppBundle/Entity/DateTimeNow.php:
3将此函数注册为生命周期回调前置器。有关注释,请参见。对于YAML:
AppBundle\Entity\Whatever:
# ...
lifecycleCallbacks:
prePersist: [ doPrePersist ]
就这样-
现在,当您持久化一个空对象时,这就是结果查询:
INSERT INTO public.whatever(id, text, timestamp) VALUES (?, ?, ?)
Parameters: { 1: null, 2: null, 3: NOW() }
请记住,如果更新现有表,这将不允许前面的行为空
请记住,如果您更新现有表,这将不允许前几行为空。哦,我明白了。对不起,误会了。您是否尝试过:可以解决错误问题:调用字符串上的成员函数格式并立即强制调用数据库。我很乐意提供帮助。我编辑了答案,你能接受吗?哦,我明白了。对不起,误会了。您是否尝试过:可以解决错误问题:调用字符串上的成员函数格式并立即强制调用数据库。我很乐意提供帮助。我编辑了答案,你能接受吗?
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
*/
protected $created;