让sailsJS自动更新createdAt和updatedAt

时间:2018-01-31 09:49:37

标签: mysql sails.js

我正在尝试设置一个具有createdAt和updatedAt列的模型,并希望风帆在条目更改时自动更新这些字段。目前我无法让它发挥作用。试图查看文档,但他们没有提供"指南"关于如何设置它。

我的文件如下:

Users.js(Model)

module.exports = {
  tableName: 'users',
  primaryKey: 'id',
  attributes: {
    id: {
      type:'number',
      unique:true,
      autoIncrement:true
    },
    name: {
      type:'string'
    },
    email: {
      type:'string'
    },
    password: {
      type:'string'
    },
    profilePicture: {
      type:'longtext'
    },
    location: {
      type:'string'
    },
    createdAt: {
      type:'number'
    },
    updatedAt:{
      type: 'number'
    }

  }

};

config.model.js(将迁移设置为安全,以便每次启动时都不会清除表。)

migrate: 'safe',

attributes: {
    createdAt: { type: 'number', autoCreatedAt: true, },
    updatedAt: { type: 'number', autoUpdatedAt: true, },
    id: { type: 'number', autoIncrement: true, },
  },

在我的数据库(MySQL)中,我将createdAt和updatedAt列设置为DATETIME。

然而,当我开始使用帆时,桌子已经存在,所以我不确定这些东西是否只有在你创建带帆的桌子时才有效。

2 个答案:

答案 0 :(得分:1)

要将这些应用于所有表格,您可以修改module.exports.models中的config/models.js并添加autoUpdatedAtautoCreatedAt属性。此外,请确保类型与数据库中的表示方式一致。在Sails中,createdAtupdatedAt使用datetime类型:

module.exports.models = {
  autoUpdatedAt: true,
  autoCreatedAt: true,

  attributes: {
    createdAt: {
      type: 'datetime',
    }
    updatedAt: {
      type: 'datetime',
    }
  }
}

如果您希望列名与updatedAtcreatedAt的默认名称不同,则应将值设置为字符串,而不是将值设置为true值将是自定义列的名称。

文档:https://sailsjs.com/documentation/concepts/models-and-orm/model-settings#?autocreatedat

答案 1 :(得分:0)

在USER模型中进行以下更改

module.exports = {
  tableName: 'users',
  primaryKey: 'id',
 autocreatedAt : true,
autoupdatedAt : true,
  attributes: {
    id: {
      type:'number',
      unique:true,
      autoIncrement:true
    },
    name: {
      type:'string'
    },
    email: {
      type:'string'
    },
    password: {
      type:'string'
    },
    profilePicture: {
      type:'longtext'
    },
    location: {
      type:'string'
    }

  }

};