在保存

时间:2016-02-24 11:40:27

标签: 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

它也应该自动递增。

关于如何实现此类功能的任何想法?

2 个答案:

答案 0 :(得分:0)

这是一个愚蠢的想法,因为可以导致冲突,并且它还会使数据非规范化,而且会增加比所需更多的复杂性。我认为没有理由去做这么愚蠢的设计决定。只需使用两个字段。

但是,如果你想在这里做蠢事我们就去:不要在数据库字段上使用自动增量并编写自定义方法并在beforeSave()回调中调用它来增加记录数量和添加时间戳。您必须手动设置ID,并且仅在实体是新的时才设置。

您遇到的问题是,当您删除记录时,计数肯定是对的。如果您有[1,2,3]并删除2,则您的下一个ID将再次为3。因此,您必须存储在其他地方保存的总计数。在哪里以及如何,尤其是可靠是您的问题。

另一个解决方案是使用两个字段,让DB增加id并使用SQL的concat()将两者合并为一个新的别名字段。或者做using a virtual property of an entity

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

答案 1 :(得分:0)

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

更多信息 http://php.net/manual/en/function.time.php