使用 sequelize.define 时如何向模型添加实例和 class 级方法
How to add instance and class level methods to a Model when using sequelize.define
我是第一次使用 Sequelize,我已经按照 official Sequelize github.
中所示的类似方式构建了我的应用程序
每个模型都在其自己的文件中设置(例如):
const { DataTypes } = require('sequelize');
// We export a function that defines the model.
// This function will automatically receive as parameter the Sequelize connection object.
module.exports = (sequelize) => {
sequelize.define('user', {
// The following specification of the 'id' attribute could be omitted
// since it is the default.
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
username: {
allowNull: false,
type: DataTypes.STRING,
unique: true,
validate: {
// We require usernames to have length of at least 3, and
// only use letters, numbers and underscores.
is: /^\w{3,}$/
}
},
});
};
然后每个模型都被拉入应用程序:
const modelDefiners = [
require('./models/user.model'),
require('./models/instrument.model'),
require('./models/orchestra.model'),
// Add more models here...
// require('./models/item'),
];
// We define all models according to their files.
for (const modelDefiner of modelDefiners) {
modelDefiner(sequelize);
}
我想为每个模型添加特定功能,以便这些功能在我的应用程序的其他地方可用,但我不确定如何最好地做到这一点。在 Sequelize 文档中有一个 example,但是它只展示了如何扩展模型 class。我可以尝试重构以匹配它,但想看看是否有一种方法可以按照 Sequelize 提供的示例设置来做到这一点。
您可以将 sequelize.define
的 return 值保存到局部变量中,并用它来定义一些静态方法,甚至 return 这个已注册的模型用它来调用所有模型包括您自己的方法。
参见
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
first_name: DataTypes.STRING,
last_name: DataTypes.STRING
}, {});
User.associate = function(models) {
User.belongsTo(models.Role, { foreignKey: 'role_id' });
};
return User;
};
我是第一次使用 Sequelize,我已经按照 official Sequelize github.
中所示的类似方式构建了我的应用程序每个模型都在其自己的文件中设置(例如):
const { DataTypes } = require('sequelize');
// We export a function that defines the model.
// This function will automatically receive as parameter the Sequelize connection object.
module.exports = (sequelize) => {
sequelize.define('user', {
// The following specification of the 'id' attribute could be omitted
// since it is the default.
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
username: {
allowNull: false,
type: DataTypes.STRING,
unique: true,
validate: {
// We require usernames to have length of at least 3, and
// only use letters, numbers and underscores.
is: /^\w{3,}$/
}
},
});
};
然后每个模型都被拉入应用程序:
const modelDefiners = [
require('./models/user.model'),
require('./models/instrument.model'),
require('./models/orchestra.model'),
// Add more models here...
// require('./models/item'),
];
// We define all models according to their files.
for (const modelDefiner of modelDefiners) {
modelDefiner(sequelize);
}
我想为每个模型添加特定功能,以便这些功能在我的应用程序的其他地方可用,但我不确定如何最好地做到这一点。在 Sequelize 文档中有一个 example,但是它只展示了如何扩展模型 class。我可以尝试重构以匹配它,但想看看是否有一种方法可以按照 Sequelize 提供的示例设置来做到这一点。
您可以将 sequelize.define
的 return 值保存到局部变量中,并用它来定义一些静态方法,甚至 return 这个已注册的模型用它来调用所有模型包括您自己的方法。
参见
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
first_name: DataTypes.STRING,
last_name: DataTypes.STRING
}, {});
User.associate = function(models) {
User.belongsTo(models.Role, { foreignKey: 'role_id' });
};
return User;
};