【问题标题】:Inheritance in sequelize modelsequelize 模型中的继承
【发布时间】:2020-03-27 02:20:49
【问题描述】:

我有一些非常常见的字段。 (CreatedBy, CreatedDate, LastUpdatedBy, LastUpdatedDate)

当我创建模型时,有什么方法可以在我的模型中继承这些属性?

我查看了sequelize docs。但在那里找不到任何相关内容。

目前我在我创建的每个模型中指定这些属性:

const Sequelize = require('sequelize');
const conn = require('../common/mssql-connection');

const Member = conn.define('Member', {
  id: {
    type: Sequelize.INTEGER,
    field: "Id",
    autoIncrement: true,
    primaryKey: true
  },
  name: {
    type: Sequelize.STRING,
    field: "Name"
  },//Everything below this line is repetitive in other models. Inheritance would be useful here.
  createdDate: {
    type: Sequelize.DATE,
    field: "CreatedDate"
  },
  createdBy: {
    type: Sequelize.STRING,
    field: "CreatedBy"
  },
  lastUpdatedDate: {
    type: Sequelize.DATE,
    field: "LastUpdatedDate"
  },
  lastUpdatedBy: {
    type: Sequelize.STRING,
    field: "LastUpdatedBy"
  }
})

module.exports = Member;

【问题讨论】:

    标签: node.js inheritance sequelize.js


    【解决方案1】:

    我也没有设法找到“标准”方式,但是您可以拦截 Sequelize 构造函数的原始定义函数,并注意您的默认字段:

     const originalDefine =  Sequelize.prototype.define; 
    
     Sequelize.prototype.define = function(tableName,fields){
        return originalDefine.call(this,tableName, {
              createdBy: { type: Sequelize.DataTypes.STRING,defaultValue:"default 'createdBy' value!!!!" },
               ...fields   
         })
     }
    

    然后创建你的 Sequelize 实例..

    const sequelize = new Sequelize(...)
    

    【讨论】:

    • 进行了一些调整以使其正常工作。但是这个概念很方便。谢谢。
    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2015-09-29
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多