Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条令:将当前_时间戳设置为数据库的默认值(即不是PHP)_Php_Symfony_Doctrine Orm - Fatal编程技术网

条令:将当前_时间戳设置为数据库的默认值(即不是PHP)

条令:将当前_时间戳设置为数据库的默认值(即不是PHP),php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,在四处查看了一段时间后,我仍然找不到一种方法来获取数据库服务器插入的当前\u时间戳作为插入时的默认值 问题是:当您将一个对象持久化到数据库中时,丢失的字段会根据规则显式设置为NULL。因此,在表定义中设置默认值似乎根本没有任何效果:- 我不想通过PHP设置时间,例如$object->setTimestampnew\DateTime;原因这可能返回与数据库服务器不同的时间,如下所述: 到目前为止,我所尝试的: 立即发送,例如$object->setTimestamp'NOW';,如下文所述: =>

在四处查看了一段时间后,我仍然找不到一种方法来获取数据库服务器插入的当前\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:

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;