Sequelize 错误:.belongsTo 调用的内容不是 Sequelize.Model 的子类

问题描述 投票:0回答:1

嘿,我正在尝试设计我的数据库架构,以便用户可以成为许多团队的一部分,并且一个团队可以拥有许多用户。我创建了一个联结表 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 不是函数。

我现在不想有关联文件,而只使用模型中的关联。

非常感谢您的帮助!

database postgresql sequelize.js
1个回答
0
投票

这三个模型之间存在循环依赖关系,它们各自加载另外两个模型。必须付出一些东西。它必须选择在其他文件完成之前完成加载一个文件。

如果您在调用

User
之前检查
Team
TeamMember.belongsTo
,则可能其中之一为空。

您可以通过将模型放入一个文件中,并将循环关联放入加载模型的自己的文件中来打破这种依赖性。

我尝试创建关联文件,但随后出现不同的错误:hasMany 不是函数。

我们需要查看该文件来提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.