嘿,我正在尝试设计我的数据库架构,以便用户可以成为许多团队的一部分,并且一个团队可以拥有许多用户。我创建了一个联结表 TeamMembers 来实现此目的,但我收到错误。
错误:TeamMember.belongsTo 调用的内容不是 Sequelize.Model 的子类
const { Model, DataTypes } = require('sequelize')
const sequelize = require('../database')
const Team = require('./teamModel')
const TeamMember = require('./teamMemberModel')
class User extends Model {}
User.init(
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNull: true
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
recoveryEmail: {
type: DataTypes.STRING,
allowNull: true,
unique: true
},
profilePicture: {
type: DataTypes.STRING,
allowNull: true
},
jobTitle: {
type: DataTypes.STRING,
allowNull: true
},
bio: {
type: DataTypes.STRING,
allowNull: true
},
hash: {
type: DataTypes.STRING,
allowNull: false
},
admin: {
type: DataTypes.BOOLEAN,
defaultValue: false,
allowNull: true
},
notifications: {
type: DataTypes.INTEGER,
defaultValue: 0
},
},
{
sequelize,
modelName: 'User',
tableName: 'users',
defaultScope: {
attributes: {
exclude: ['hash'] /* By default, DO NOT include password */
}
},
scopes: {
/* Add a scope for getting with password, use this only intentionally */
withPassword: {
attributes: {},
},
},
}
)
User.belongsTo(Team, { foreignKey: 'teamId' })
User.hasMany(TeamMember, { foreignKey: 'userId' })
User.hasMany(Team, { foreignKey: 'ownerId' })
module.exports = User
// Team model definition
const { Model, DataTypes } = require('sequelize')
const sequelize = require('../database')
const User = require('./userModel')
const TeamMember = require('./teamMemberModel')
class Team extends Model {}
Team.init(
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
profilePicture: {
type: DataTypes.STRING,
allowNull: true
},
ownerId: {
type: DataTypes.INTEGER,
references: {
model: User,
key: 'id',
}
}
},
{
sequelize,
modelName: 'Team',
tableName: 'teams',
}
)
Team.hasMany(TeamMember, { foreignKey: 'teamId' })
module.exports = Team
const { Model, DataTypes } = require('sequelize')
const sequelize = require('../database')
const User = require('./userModel')
const Team = require('./teamModel')
class TeamMember extends Model {}
TeamMember.init({
userId: {
type: DataTypes.INTEGER,
references: {
model: User,
key: 'id',
},
allowNull: false
},
teamId: {
type: DataTypes.INTEGER,
references: {
model: Team,
key: 'id',
},
allowNull: false
},
role: {
type: DataTypes.ENUM('Super Admin', 'Admin', 'Member'),
allowNull: false,
}
}, {
sequelize,
modelName: 'TeamMember',
tableName: 'team_members'
})
TeamMember.belongsTo(User, { foreignKey: 'userId' });
TeamMember.belongsTo(Team, { foreignKey: 'teamId' });
module.exports = TeamMember
我尝试创建关联文件,但随后出现不同的错误:hasMany 不是函数。
我现在不想有关联文件,而只使用模型中的关联。
非常感谢您的帮助!
这三个模型之间存在循环依赖关系,它们各自加载另外两个模型。必须付出一些东西。它必须选择在其他文件完成之前完成加载一个文件。
如果您在调用
User
之前检查 Team
和 TeamMember.belongsTo
,则可能其中之一为空。
您可以通过将模型放入一个文件中,并将循环关联放入加载模型的自己的文件中来打破这种依赖性。
我尝试创建关联文件,但随后出现不同的错误:hasMany 不是函数。
我们需要查看该文件来提供帮助。