如何使用doctrine定义yaml中的当前时间戳?

Cap*_*ine 14 yaml timestamp doctrine

我尝试了以下yaml代码:

columns:
  created_time:
    type: timestamp
    notnull: true
    default: default CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

在输出的sql语句中,该字段被视为datetime而不是timestamp,我无法在其中定义当前时间戳...

如果我坚持使用时间戳来存储当前时间,那么如何在yaml中这样做?

小智 17

如果您愿意牺牲一些可移植性(请参阅columnDefinition属性的描述)来使用MySQL的自动初始化TIMESTAMP(请参阅MySQL时间戳初始化),那么您可以使用以下命令:

YAML:

  created_time:
    type: datetime
    columnDefinition: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

注解:

@ORM\Column(type="datetime", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
Run Code Online (Sandbox Code Playgroud)


小智 13

请注意,DEFAULT CURRENT_TIMESTAMP它与Timestampable的工作方式不同,因此您不能盲目地将其中一个交换为另一个.

  • 首先,前者使用数据库服务器的日期/时间,而后者使用在Web服务器上调用PHP的date()函数的Doctrine魔术.换句话说,它们是从两个完全不同的时钟源获取日期/时间的两种不同方式.如果使用Timestampable,您可能会遇到大麻烦,您的Web服务器在与数据库服务器不同的机器上运行,并且您不会使用例如NTP保持时钟同步.

  • 此外,DEFAULT CURRENT_TIMESTAMP表定义的存在使得数据库模型更加一致IMHO,无论您如何插入数据(例如,INSERT在数据库引擎命令行上运行s),您将始终获得当前日期/时间在专栏上.

顺便说一句,我也在寻找CURRENT_TIMESTAMP初始问题中提到的问题的答案,因为这是(由于上面列出的原因)我保留"时间戳"列的首选方式.


Twe*_*e47 11

您可以在学说中使用"Timestampable"功能,例如:

actAs:
  Timestampable:
    created:
      name: created_time
    updated:
      disabled: true
columns:
  created_time:
    type: timestamp
   notnull: true
Run Code Online (Sandbox Code Playgroud)