gpt4 book ai didi

node.js - 使用Sequelize实现单表继承

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:54 27 4
gpt4 key购买 nike

有没有办法使用sequelize创建单表继承?

我想要一个用于 Purchase 和 PartialPurchase 模型的 STI,其中我将有一个类型字段,它将是“Purchase”或“PartialPurchase”,以及 Purchase 和 PartialPurchase 类,它们各自继承自一个 Operation 类。

我不认为 sequelize 支持这一点,但是有可能实现吗?

最佳答案

嘿,所以我知道你没有在合理的时间内得到答案,但你可以像你说的那样在你的数据库中使用一个枚举类型列,然后使用 sequelize 的范围功能。 Scope 在从查询到模型定义和关联的所有方面都起作用。结果很好。我为包含请求和响应的消息表实现了类似的东西。

module.exports = function(sequelize, DataTypes) {
var Message = sequelize.define('Message', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
type: {
type: DataTypes.ENUM('REQUEST', 'RESPONSE', 'FILE'),
allowNull: false
},
text: {
type: DataTypes.TEXT,
allowNull: false,
},
state: {
type: DataTypes.JSONB,
allowNull: true,
},
userTeamId: {
type: DataTypes.INTEGER,
allowNull: false,
}
}, );
Message.associate = (models) => {
Message.belongsTo(models.UserTeam, { foreignKey: 'userTeamId', targetKey: 'tag'})
}
return Message;
};

这就是我进行联想的方式。

module.exports = function(sequelize, DataTypes) {
var UserTeam = sequelize.define('UserTeam', {
tag: { type: DataTypes.UUID, allowNull: false, unique: true},
active: { type: DataTypes.BOOLEAN, defaultValue: false },
activationNonce: { type: DataTypes.STRING },
UserId: { type: DataTypes.INTEGER, },
TeamId: { type: DataTypes.INTEGER, },
type: DataTypes.ENUM('OWNER', 'ADMIN', 'MEMBER', 'GUEST'),
},);
UserTeam.associate = (models) => {
UserTeam.hasMany(models.Message, { as: 'responses', foreignKey: 'userTeamId', sourceKey: 'tag', scope: {type: 'RESPONSE'}})
UserTeam.hasMany(models.Message, { as: 'requests', foreignKey: 'userTeamId', sourceKey: 'tag', scope: {type: 'REQUEST'}})
UserTeam.hasMany(models.Message, { as: 'files', foreignKey: 'userTeamId', sourceKey: 'tag', scope: {type: 'FILE'}})
UserTeam.hasOne(models.Team, {foreignKey: 'id', sourceKey: 'TeamId'})
UserTeam.belongsTo(models.User, {foreignKey: 'UserId', sourceKey: 'id'})
}
return UserTeam;
};

关联的好处在于,您可以使用 UserTeam 实例(例如“userteam.getFiles()”)来获取所有关联文件。

关于node.js - 使用Sequelize实现单表继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com