在 sails.js / waterline 中,是否可以重命名 `createdAt` 和 `updatedAt`?

11
使用 SailsJS 的 Waterline ORM,我的 autoCreatedAtautoUpdatedAt 默认值设置为 false,但我仍然需要使用不同字段名来实现其功能(由 DBA 请求)。是否有以下任一方式:
  1. 指定自动生成字段的不同列名,或者
  2. 在属性定义中手动模拟相同的行为,或者
  3. 只需在架构中留下自定义字段,如 created_tsupdated_ts,以便在数据库架构本身中使用触发器进行更新(但我仍然需要 Waterline 读取它们)?

提前感谢。


2
可能是更改CreatedAt / UpdateAt属性的字段名称的重复问题。 - sgress454
实际上,链接的答案是一个稍微不同的问题。在这里,我们想知道是否可以更改DB列名,而不是域对象属性名(这是链接答案中提出的问题)。它可能是相同的答案,也可能不是,这就是我现在想知道的... - arcseldon
1
自动生成的字段名称在源代码中被硬编码,因此无法更改。 - Andrew Eddie
好的,我是 sails/waterline 的用户,我认为这应该在一段时间前就完成了,所以我将为此打开一个 pull-request。完成后我会发布一个答案! - Tristan Foureur
1个回答

18

我刚才提交了两个拉取请求来实现这个功能;

  • 一个是到waterline-schema,以便模式构建器将其考虑在内
  • 一个是到waterline,以便时间戳行为按预期工作。

您还可以关注此问题

合并后,在您的模型中,例如:

autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
    creationDate: {
        columnName: 'created_ts',
        type: 'datetime',
        defaultsTo: function() {return new Date();}
    },
    updateDate: {
        columnName: 'updated_ts',
        type: 'datetime',
        defaultsTo: function() {return new Date();}
    }
},
beforeUpdate:function(values,next) {
    values.updateDate = new Date();
    next();
}

你只需要做:

autoCreatedAt: 'created_ts',
autoUpdatedAt: 'updated_ts'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接