我正在使用Knex.js(0.19.0
)和PostgreSQL(11-alpine
,[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
)做一个REST教程,我注意到当我发出PUT
请求并更新数据时,updatedAt
列不起作用。
下面是我的users
表:
// users_migration.js
exports.up = function(knex) {
return knex.schema.createTable('users', function(table) {
table
.increments('id')
.primary()
.unsigned();
table.string('firstName');
table
.string('lastName')
.index()
.notNullable();
table
.string('email')
.unique()
.index()
.notNullable();
table.string('password').notNullable();
table.string('role').defaultTo('STAFF');
table.boolean('isActive').defaultTo(false);
table.timestamp('createdAt').defaultTo(knex.fn.now());
table.timestamp('updatedAt').defaultTo(knex.fn.now());
});
};
字符串
我试过这个:
table.timestamp('createdAt').defaultTo(knex.raw('CURRENT_TIMESTAMP'));
table
.timestamp('updatedAt')
.defaultTo(knex.raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
型
但也不管用。
我该怎么做?请帮帮忙。
3条答案
按热度按时间fzwojiic1#
在定义模式时,可以使用
timestamps()
方法自动添加created_at
和updated_at
列。个字符
在数据库中添加created_at和updated_at列,并将每个列设置为datetime类型。当第一个参数为true时,将使用timestamp类型。当第二个参数为true时,两列默认为非null并使用当前的timestamp。注意,在MySQL中.timestamps()只有秒精度,要获得更好的精度,请直接使用.datetime或.timestamp方法。
来源:https://knexjs.org/guide/schema-builder.html#timestamps
eit6fx6z2#
根据文件,
字符串
添加created_at和updated_at。第二个参数为true,表示现在的日期。
来源:https://knexjs.org/#Schema-timestamps
sh7euo9m3#
postgresql
不支持语法CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
.使
updatedAt
在列更新时自动更新唯一方法是使用触发器这可能可行(从Update timestamp when row is updated in PostgreSQL复制粘贴):
字符串
请让我知道如果有一些语法错误或类似的东西。