Cakephp 保存时将Datetime添加到主键

Cakephp 保存时将Datetime添加到主键,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我想做的是使我的主键在保存到数据库中时附加当前的日期时间戳。 例如 主键列的第一个值将包括日期时间24-02-2016 4:35,因此 240220164350 (The last digit is the auto increment value and previous ones is date and time) 然后第二个可能是 240220164361 它也应该是自动递增的 关于如何实现这种功能,有什么想法吗 这是一个愚蠢的想法,因为它可能会导致冲突,同时也会对数据进行非规范化处

我想做的是使我的主键在保存到数据库中时附加当前的日期时间戳。 例如 主键列的第一个值将包括日期时间24-02-2016 4:35,因此

240220164350   (The last digit is the auto increment value and previous ones is date and time)
然后第二个可能是

240220164361

它也应该是自动递增的


关于如何实现这种功能,有什么想法吗

这是一个愚蠢的想法,因为它可能会导致冲突,同时也会对数据进行非规范化处理,而且会增加比需要更多的复杂性。我认为完全没有理由做出如此愚蠢的设计决定。只需使用两个字段

但是,如果您喜欢在这里做一些愚蠢的事情,我们就这样做:不要在DB字段上使用autoincrement,编写自定义方法并在
beforeSave()
回调中调用它,该回调会增加记录数并添加时间戳。必须手动设置id,并且仅当实体为新实体时才设置id

您将面临的问题是,当您删除记录时,计数将不正确。如果您有[1,2,3]并删除了2,则下一个id将再次为3。因此,您必须将保存在其他地方的总计数存储起来。你的问题出在哪里、如何以及特别可靠

另一种解决方案是使用两个字段,让DB增加id,并使用SQL的concat()将这两个字段组合成一个新的别名字段。或者去做


或者在创建记录后执行另一个save(),将两个字段的值合并并保存到第三个字段中。

这根本不是一个好主意。您应该使用两个字段
id
time
。 但是,您可以使用PHP
time()
函数返回当前Unix时间戳


更多信息

我知道,但我的客户想从我这里得到。。我有个主意。。如果在显示id之前,我将其附加到已创建的字段中,该怎么办?会更容易吗?就像我说的,将它们分开保存,在本例中,在实体上使用虚拟字段,或者在数据库级别使用concat()直接连接它们。请参阅更新的答案。