как преодолеть эту проблему ассоциации - PullRequest
0 голосов
/ 04 апреля 2020

Я прочитал документацию и много исследовал, но я все еще не мог найти решение этой проблемы, может кто-нибудь подсказать мне? Что я делаю не так?

Ошибка:

C:\Users\Marlon\Desktop\Projeto\EuroKT\backend\node_modules\sequelize\lib\associations\mixin.js:49   
      throw new Error(`${this.name}.belongsToMany called with something that's not a subclass of Sequelize.Model`);
      ^

Error: User.belongsToMany called with something that's not a subclass of Sequelize.Model
    at Function.belongsToMany (C:\Users\Marlon\Desktop\Projeto\EuroKT\backend\node_modules\sequelize\lib\associations\mixin.js:49:13)
    at Object.<anonymous> (C:\Users\Marlon\Desktop\Projeto\EuroKT\backend\dist\src\data\models\user.js:81:6)

Класс пользователя:

import { Model, DataTypes } from 'sequelize';
import { DbInstance } from '../../main/context';
import { Attributes } from '../../commons/Helpers';
import * as Config from '../../config.json';
import Permission from './permission';
import Project from './project';

var _reSync = Config.Database.ForceSync;
var _instance = new DbInstance().getInstance();

class User extends Model {

  id!: number;
  status: string;
  name!: string;
  registryCode!: string;
  phone!: string;
  email!: string;
  password!: string;
  permissionId!: number;

}

User.init({
  id: {
    type: new DataTypes.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  status: {
    type: new DataTypes.CHAR(2)
  },
  name: {
    type: new DataTypes.STRING(30),
    allowNull: false
  },
  registryCode: {
    type: new DataTypes.STRING(12),
    allowNull: false
  },
  phone: {
    type: new DataTypes.STRING(12)
  },
  email: {
    type: new DataTypes.STRING(50)
  },
  password: {
    type: new DataTypes.STRING(100)
  },
  permissionId: {
    type: new DataTypes.INTEGER,
    references: {
      model: 'Permission',
      key: 'id'
    }
  }
}, {
  sequelize: _instance,
  tableName: 'User',
  timestamps: false
});

User.belongsTo(Permission, { foreignKey: 'permissionId', as: 'Permission' });
User.belongsToMany(Project, { through: 'User_project' });
User.sync({ force: _reSync });
export default User;

Класс проекта:

import { Model, DataTypes } from 'sequelize';
import { DbInstance } from '../../main/context';
import * as Config from '../../config.json';
import User from './user';

var _reSync = Config.Database.ForceSync;
var _instance = new DbInstance().getInstance();

class Project extends Model {

  id!: number;
  status: string;
  name!: string;

}

Project.init({
  id: {
    type: new DataTypes.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  status: {
    type: new DataTypes.CHAR(2)
  },
  name: {
    type: new DataTypes.STRING(30),
    allowNull: false
  }
}, {
  sequelize: _instance,
  tableName: 'Project',
  timestamps: false
});

Project.belongsToMany(User, { through: 'User_project' });
Project.sync({ force: _reSync });
export default Project;

Я хочу, чтобы сиквелиз автоматически создал таблицу отношений N: N 'User_Project'. использовал эту документацию в качестве примера https://sequelize.org/v5/manual/associations.html

1 Ответ

0 голосов
/ 04 апреля 2020

Вы должны определить все ассоциации всех моделей ПОСЛЕ определения всех ваших моделей. Например, в отдельном js -файле или определите функцию 'associate' в каждой модели и вызовите эти функции позже после регистрации всех моделей.

...