Обновление
Этим утром я хотел использовать другую встроенную функцию продолжения, и внезапно стали доступны функции ownTo () и hasMany (), которые работали на некоторых моделях - не на всех! Эти модели имеют абсолютно одинаковый рисунок и отличаются только по названию.
Например hasOne
недоступно для topicClass
Я больше ничего не менял. За исключением того, что я перезапустил 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 после, тогда все будет так, как я хочу.
Так что я тут делаю не так, пожалуйста?