Проблема создания много-много ассоциаций в дальнейшем. (BelongsToMany) - PullRequest
0 голосов
/ 29 апреля 2020

Я получаю следующую ошибку, когда определяю связь между многими из двух таблиц:

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

Я объясню свой сценарий.

У меня есть таблицы учителя и курса, Чтобы создать ассоциацию, я создал сводную таблицу под названием courses_teachers.

Код миграции для courses_teachers:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('courses_teachers', {
      id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
      },
      course_id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: { model: 'courses', key: 'id' },
        onDelete: 'CASCADE',
        onUpdate: 'CASCADE',
      },
      teacher_id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: { model: 'teachers', key: 'id' },
        onDelete: 'CASCADE',
        onUpdate: 'CASCADE',
      },
      created_at: {
        type: Sequelize.DATE,
        allowNull: false,
      },
      updated_at: {
        type: Sequelize.DATE,
        allowNull: false,
      },
    });
  },

  down: (queryInterface) => {
    return queryInterface.dropTable('courses_teachers');
  },
};

Модели:

Учитель:

import Sequelize, { Model } from 'sequelize';

class Teacher extends Model {
  static init(sequelize) {
    super.init(
      {
        name: Sequelize.STRING,
      },
      {
        sequelize,
      }
    );

    return this;
  }

  static associate(models) {
    this.belongsToMany(models.Course, {
      foreignKey: 'teacher_id',
      through: 'courses_teachers',
      as: 'courses',
    });
  }
}

export default Teacher;

Курс:

import Sequelize, { Model } from 'sequelize';

class Courses extends Model {
  static init(sequelize) {
    super.init(
      {
        name: Sequelize.STRING,
      },
      {
        sequelize,
      }
    );
    return this;
  }

  static associate(models) {
    this.belongsToMany(models.Teacher, {
      foreignKey: 'course_id',
      through: 'courses_teachers',
      as: 'teachers',
    });
  }
}

export default Courses; 

Ошибка:

C:\eadfabet\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: Teacher.belongsToMany called with something that's not a subclass of Sequelize.Model
    at Function.belongsToMany (C:\eadfabet\node_modules\sequelize\lib\associations\mixin.js:49:13)
    at Function.associate (C:\eadfabet\src\app\models\Teacher.js:33:10)
    at C:\eadfabet\src\database\index.js:26:45
    at Array.map (<anonymous>)
    at Database.init (C:\eadfabet\src\database\index.js:25:8)
    at new Database (C:\eadfabet\src\database\index.js:17:10)
    at Object.<anonymous> (C:\eadfabet\src\database\index.js:31:20) ...

[nodemon] app crashed - waiting for file changes before starting... 

Ошибка происходит только в модели учителя, в модели курса это не происходит.

1 Ответ

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

Я имел в виду Модельный курс неправильно.

Спасибо @William Prigol Lopes!

...