Последовательные ассоциативные функции не имеют никакого эффекта

#javascript #sequelize.js

#javascript #sequelize.js

Вопрос:

Я использую текущую версию Sequelize и пытаюсь построить ассоциации между двумя моделями. На самом деле должно быть довольно просто, поскольку Sequelize предлагает hasMany и belongsTo .

Но вызов вообще не имеет никакого эффекта. Я попробовал это с новой базой данных SQL. Сами таблицы создаются просто без какого-либо внешнего ключа.

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

контроллер БД

 const userModel = require('../model/user')
const subjectModel = require('../model/subject')
const database = require('../db/database').sequeliceInstance

async function setupAssociations () {
  await database.sync()

  // user   subject
  userModel.hasMany(subjectModel)
  subjectModel.belongsTo(userModel)

  // subject and topic
  subjectModel.hasMany(topicModel)
  topicModel.belongsTo(subjectModel)

  // topic and question
  topicModel.hasMany(questionModel)
  questionModel.belongsTo(topicModel)

  // question and answer
  questionModel.hasMany(answerModel)
  answerModel.belongsTo(questionModel)
  return Promise.resolve()
}
  

user.js

 const Sequelize = require('sequelize')
const db = require('../db/database').sequeliceInstance

const user = db.define('user', {
  // attributes
  firstName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  lastName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false
  },
  title: {
    type: Sequelize.STRING,
    allowNull: false
  },
  password: {
    type: Sequelize.TEXT,
    allowNull: false
  }
})

module.exports = user
  

subject.js

 const Sequelize = require('sequelize')
const db = require('../db/database').sequeliceInstance

const subject = db.define('subject', {
  // attributes
  subjectName: {
    type: Sequelize.TEXT,
    allowNull: false
  }
})

module.exports = subject
  

Ответ №1:

Я нашел решение.

await database.sync() должен вызываться в самом конце функции.