【问题标题】:Model not getting imported as a Sequelize.Model模型未作为 Sequelize.Model 导入
【发布时间】:2020-03-25 18:22:30
【问题描述】:

我正在尝试通过另一个表使用 sequelize N:M 关系,但我不断收到此错误:

throw new Error(${this.name}.belongsToMany called with something that's not a subclass of Sequelize.Model);

Error: Cases.belongsToMany called with something that's not a subclass of Sequelize.Model 

这是我的课程:

models/User.js

const Sequelize = require('sequelize');
const sql = require('../config/sql');
const DocumentType = require('./DocumentType');
const Case = require('./Case');


const User = sql.define('Users', {
    firstName: Sequelize.STRING,
    lastName: Sequelize.STRING,
    email: Sequelize.STRING,
    document: Sequelize.INTEGER,
    documentTypeId: Sequelize.INTEGER,
    password: Sequelize.STRING,
    active: Sequelize.INTEGER
});

User.belongsTo(DocumentType, {foreignKey: 'documentTypeId' ,as: 'documentType'});
User.belongsToMany(Case, { through: 'CaseUser' });

User.findById = (id) => {
    return User.findOne({
        where: {
            id: id
        },
        include: 'documentType'
    });
};

User.findByEmail = (email) => {
    return  User.findOne({
        where: {
            email: email
        },
        include: 'documentType'
    });
};

User.checkActiveStatus = (id) => {
    return User.findOne({
        where: {
            id: id
        },
        attributes: ['active']
    });
};

module.exports = User;

models/Case.js

const Sequelize = require('sequelize');
const sql = require('../config/sql');
const User = require('./User');

const Case = sql.define('Cases', {
  description: Sequelize.STRING,
  startDate: Sequelize.STRING
});

Case.belongsToMany(User, {through: 'CaseUser'});

module.exports = Case;

我只在Case.belongsToMany(User, { through: 'CaseUser' }); 而不是User.belongsToMany(Case, { through: 'CaseUser' }); 一个中得到错误

奇怪的是,如果我将 belongsToMany(User... 切换为 belongsToMany(DocumentType... 并导入 DocumentType 文件,我不会收到错误消息。 DocumentType 模型与用户模型几乎相同

models/DocumentType.js

const Sequelize = require('sequelize');
const sql = require('../config/sql');

const DocumentType = sql.define('DocumentTypes', {
  name: Sequelize.STRING,
  slug: Sequelize.STRING
}, {
  timestamps: false
});

module.exports = DocumentType;

关于什么可能导致这种行为的任何想法?

谢谢!

【问题讨论】:

    标签: javascript mysql node.js express sequelize.js


    【解决方案1】:

    你应该尽量避免循环依赖。

    1. 删除行
    const Case = require('./Case');
    

    Case.belongsToMany(User, {through: 'CaseUser'});
    

    来自 User.js

    1. 删除行
    const User = require('./User');
    

    User.belongsToMany(Case, { through: 'CaseUser' });
    

    来自 Case.js

    1. 创建associations.js
    const Case = require('./Case');
    const User = require('./User');
    
    Case.belongsToMany(User, {through: 'CaseUser'});
    User.belongsToMany(Case, { through: 'CaseUser' });
    

    【讨论】:

    • 我应该如何处理来自该文件的关联?我应该使用 require 将它们导入其中一个模型吗?
    • 您应该将所有模型和 Associations.js 导入到类似 database.js 的文件中,并在您希望通过 sequelize 查询模型的地方导出带有注册模型的 sequelize 实例。
    • 如果我在评论中创建文件,当我从模型文件中执行 require(associations.js) 时会弹出与之前相同的错误,我应该在哪里导入它?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2012-10-20
    • 2018-06-10
    • 2011-04-24
    • 2019-07-01
    • 2013-04-05
    • 2021-01-06
    相关资源
    最近更新 更多