Модель не импортируется как Sequelize.Model - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь использовать последовательность 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 / Пользователь. 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;

модели / кейс. 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' }); one

Странно то, что если я переключу 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;

Есть идеи о том, что может быть причиной такого поведения?

Спасибо!

1 Ответ

1 голос
/ 25 марта 2020

Вам следует избегать циклических зависимостей.

  1. Удалить строки
const Case = require('./Case');

и

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

от пользователя. js

Удалить строки
const User = require('./User');

и

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

из дела. js

Создание ассоциаций. js
const Case = require('./Case');
const User = require('./User');

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