如何在cakephp 3中为整数字段(创建,修改)自动添加unix时间戳

How automatically add unix timestamp for the integer field (created, modified) in cakephp 3

在 cakephp 2 中有一个神奇的方法可以自动用 unix 时间戳填充 createdmodified 列。但是在 cakephp 3 中只有 TimestampBehavior 创建 datetime 而不是 unixtime 整数值 int.

请提供一个解决方案,在 cakephp 3 中通过 unix 时间戳值神奇地填充类型为 intcreatedmodified 列。

谢谢

P.S。 这是我的数据库 table 架构

CREATE TABLE `users_verifications_codes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
...
`created` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

使用 TimestampBehavior.

The timestamp behavior allows your table objects to update one or more timestamps on each model event. This is primarily used to populate data into created and modified fields. However, with some additional configuration, you can update any timestamp/datetime column on any event a table publishes.

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
    }
}

先看看手册总是个好主意。在 Cake3 中还有许多其他的东西以类似的方式发生了变化。我建议您也阅读迁移指南,它让您了解变化,而且变化很多。

[CakePHP 3.5.8] createdmodified 列在我从 CakePHP 转换的应用程序数据库中有 BIGINT 类型 2.x

最终在 Models\ModelnameTable.php

中使用了 beforeSave() 方法
public function beforeSave($event, $entity, $options)
{
    if ($entity -> modified instanceof Time) {
        $entity -> modified = $entity -> modified -> toUnixString();
    }

    if ($entity->created instanceof Time) {
        $entity->created = $entity->created->toUnixString();
    }
}