Sequelize ассоциативные функции недоступны - проблема IntellIj - PullRequest
1 голос
/ 22 апреля 2019

Обновление

Этим утром я хотел использовать другую встроенную функцию продолжения, и внезапно стали доступны функции ownTo () и hasMany (), которые работали на некоторых моделях - не на всех! Эти модели имеют абсолютно одинаковый рисунок и отличаются только по названию.

Например hasOne недоступно для topicClass

enter image description here

Я больше ничего не менял. За исключением того, что я перезапустил intelliJ. Я перезапустил его прежде, чем открыл этот вопрос, и у меня всегда была одна и та же проблема. Так что я думаю, что эта проблема основана на IDE! Еще бы подсказать, как этого избежать


У меня есть приложение, использующее sequelize с SQLite.

Когда я хочу установить ассоциации в моем db-controller.js, он говорит мне, что функции ассоциации, такие как belongsTo и hasmany из document , недоступны.

Когда я выполняю функцию setupAssociations и проверяю дБ позже, есть модели, но не установлены ассоциации.

Здесь db-controller.js (больше информации с моей стороны после моделей внизу!)

const Sequelize = require('sequelize')
const userModel = require('../model/user')
const subjectModel = require('../model/subject')
// eslint-disable-next-line no-unused-vars
const initUser = userModel.user.initUser()
// eslint-disable-next-line no-unused-vars
const initSubject = subjectModel.subject.initSubject()
const sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: './user.sqlite',
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
  logging: false
})
sequelize.sync()

function setupAssociations(){
  // user + subject
  userModel.user.userClass.hasMany(subjectModel.subject.subjectClass)
  subjectModel.subject.subjectClass.belongsTo(userModel.user.userClass)
  // subject + topic
}

function testAssociations(){
  setupAssociations()
}

testAssociations()

и две мои модели

const Sequelize = require('sequelize')
const sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: '../controller/user.sqlite',
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
  logging: false
})
sequelize.sync()

/**
 * User Model
 */
class User extends Sequelize.Model {
}


/**
 * Init user model
 */

function initUser () {
  //TODO optional realize with sequelize.transaction
  User.init(
    // 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
      }
    },
    // options
    {
      sequelize,
      modelName: 'user'
    }
  )

}

/**
 * Makes functions available globally
 */
exports.user = {
  initUser: initUser,
  userClass: User
}

и Тема

const Sequelize = require('sequelize')
const sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: '../controller/user.sqlite',
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
  logging: false
})
sequelize.sync()

/**
 // * Subject Model
 */
class Subject extends Sequelize.Model {
}

/**
 * Initialises subject model
 */
function initSubject () {
  Subject.init(
    // attributes
    {
      subjectName: {
        type: Sequelize.STRING,
        allowNull: false
      }
    },
    // options
    {
      sequelize,
      modelName: 'subject'
    }
  )
}

/**
 * Makes functions globally available
 */
exports.subject = {
  initSubject: initSubject,
  subjectClass: Subject
}

Если я создаю другой класс, например class TestClass extends Sequelize.Model, в файле user.js и вызываю hasMany с belongsTo в функции initUser и проверяю db после, тогда все будет так, как я хочу.

Так что я тут делаю не так, пожалуйста?

1 Ответ

0 голосов
/ 23 апреля 2019

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

@type {{initTopic: (function(): Promise<*>), topicClass: Topic}}

Это вызвало проблему. После удаления все функции продолжения снова появились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...