Продолжить, не создавая столбцы ассоциации модели

Меня немного смущает, когда Sequelize создает поля для ассоциаций.

Я создал свои миграции с помощью sequelize-cli. Это сгенерировало файл миграции и модели. Затем в файле модели я заполнил свои ассоциации. Потом побежал npx sequelize-cli db:migrate.

Это создает таблицы, но не внешние ключи, необходимые для ассоциаций, определенных в модели.

Например: миграция-вопросы:

"use strict";
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable("questions", {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      category: {
        type: Sequelize.INTEGER
      },
      question: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        defaultValue: new Date(),
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        defaultValue: new Date(),
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable("questions");
  }
};

модели-вопросы:

"use strict";
module.exports = (sequelize, DataTypes) => {
  const questions = sequelize.define(
    "questions",
    {
      question: DataTypes.STRING,
      weight: DateTypes.INTEGER
    },
    {}
  );
  questions.associate = function(models) {
    // associations can be defined here
    models.questions.hasOne(models.question_categories);
    models.questions.hasMany(models.question_answers);
  };
  return questions;
};

введите описание изображения здесь


person Batman    schedule 05.08.2019    source источник
comment
Исходя из ваших ассоциаций, таблица categories должна иметь question_id FK, а таблица answers также должна иметь question_id FK. Итак, вы хотите, чтобы операция миграции создала question_id FK для таблиц categories и answers? Я правильно понял?   -  person slideshowp2    schedule 11.02.2020


Ответы (1)


Вам необходимо указать столбцы, которые используются во внешнем ключе. Что-то в этих строках

  questions.associate = function(models) {
    // associations can be defined here
    models.questions.hasOne(models.question_categories, { foreignKey: 'question_id' });
    models.questions.hasMany(models.question_answers, { foreignKey: 'question_id' });
  };

Это создаст внешний ключ в таблице question_categories, указывающий на таблицу questions.

question_categories.question_id -> questions.id
person Aditya    schedule 05.08.2019