四处寻找了一段时间后,我仍然找不到让数据库服务器插入 CURRENT_TIMESTAMP 的方法(作为 INSERT
的默认值)。
问题:当你将一个对象持久化到数据库时,丢失的字段被 Doctrine 明确设置为 NULL。所以看起来,在表定义中设置默认值根本没有任何效果:-(
我不想通过 PHP 设置时间(例如 $object->setTimestamp(new\DateTime());
),因为这可能会返回与数据库服务器不同的时间,如此处解释:https://stackoverflow.com/a/3705090/1668200
到目前为止我尝试了什么:
按字面意思发送 NOW
(例如 $object->setTimestamp('NOW()');
),如此处所述:https://stackoverflow.com/a/13850741/1668200
=> 无效:错误:调用字符串上的成员函数 format()
在持久化之前从对象中删除“timestamp”属性(参见 https://stackoverflow.com/a/3600758/1668200)也没有用:该字段无论如何都被 Doctrine 设置为 NULL。
我发现的任何其他解决方案(包括 Doctrine 扩展 'Timestampable' https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/timestampable.md )都使用 PHP 的时间。
最佳答案
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
*/
protected $created;
请记住,如果您更新现有表格,这将不允许之前的行为空。
关于php - 学说 : Set CURRENT_TIMESTAMP as default value by the database (i. e.不是通过 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31947364/