【问题标题】:Change field name for CreatedAt / UpdateAt Attributes更改 CreatedAt / UpdateAt 属性的字段名称
【发布时间】:2014-08-25 00:06:52
【问题描述】:

我正在尝试在 SailsJS 中为现有的 MSSQL 表建模。不出所料,现有数据库中的表具有 createdAt 和 updatedAt 列,类似于 SailsJS 框架生成的列。

有没有办法将 SailsJS 框架生成的属性的值分配给我定义的属性? 例如:

attributes: {
    ...
    creationDate:{
        columnName:'cre_dt',
        type:'datetime',
        defaultsTo: this.createdAt
    }
    ...
}

【问题讨论】:

    标签: node.js sails.js waterline


    【解决方案1】:

    不,但您可以完全关闭自动生成的属性并使用您自己的:

    autoCreatedAt: false,
    autoUpdatedAt: false,
    attributes: {
        creationDate: {
            columnName: 'cre_dt',
            type: 'datetime',
            defaultsTo: function() {return new Date();}
        },
        updateDate: {
            columnName: 'upd_dt',
            type: 'datetime',
            defaultsTo: function() {return new Date();}
        }
    },
    //Resonsible for actually updating the 'updateDate' property.
    beforeValidate:function(values,next) {
        values.updateDate= new Date();
        next();
    }
    

    请参阅Waterline options doc

    【讨论】:

    • Scott,如果您使用架构来强制执行行为,例如created_ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,您是否必须使用afterUpdate 处理程序将资源加载回数据库并绑定数据回到资源?
    • 'afterUpdate' 挂钩似乎出现在更新查询已执行之后,因此您的代码不会更新 updateDate。我完成这项工作的方法是使用“afterValidate”钩子。在我看来,这是最适合放置此代码的钩子。(这是在使用 Sails 0.10 时编写的)
    • 这应该是beforeUpdate——很惊讶之前没有人发现它!
    • @sgress454 - 是否可以只提供要在数据库中使用的不同 columnName(date_created、last_updated),同时保持域实体属性名称相同(createdAt、updatedAt)。或者我们是否必须为模型中的每个域对象遍历上述样板才能覆盖列名?
    • @sgress454 现在可以在不禁用 Waterline v0.11.0(Sails 0.12.0)中的默认支持的情况下覆盖 columnName
    【解决方案2】:

    您可以通过以下方式重新映射:

    attributes: {
        createdAt: {
          type: 'datetime',
          columnName: 'cre_dt'
        },
        updatedAt: {
          type: 'datetime',
          columnName: 'upd_dt'
        },
        // your other columns
      }
    

    【讨论】:

      【解决方案3】:

      现在可以使用autoCreatedAtautoUpdatedAt 为这些字段设置自定义名称,如http://sailsjs.com/documentation/concepts/models-and-orm/model-settings#?autocreatedat 所述

      如果设置为字符串,该字符串将用作自定义 createdAt 属性的字段/列名。

      【讨论】:

        猜你喜欢
        • 2016-06-24
        • 2018-11-07
        • 2020-01-27
        • 1970-01-01
        • 2012-01-18
        • 2017-06-24
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多