Наследование в модели наследования - PullRequest
0 голосов
/ 26 марта 2020

У меня есть некоторые поля, которые очень распространены. (CreatedBy, CreatedDate, LastUpdatedBy, LastUpdatedDate).

Когда я создаю модель, могу ли я унаследовать эти свойства в своей модели?

Я изучил документы sequelize . Но не смог найти там ничего уместного.

В настоящее время я указываю эти свойства в каждой модели, которую я создаю:

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;

1 Ответ

1 голос
/ 26 марта 2020

Мне также не удалось найти «стандартный» способ, но вы можете перехватить исходную функцию определения конструктора 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(...)
...