更新
今天早上我想使用另一个内置的sequelize函数,突然之间,belongsTo()和hasMany()函数可用并且在某些模型上工作 - 并非全部!这些模型具有完全相同的模式,仅在名称上有所不同。
例如,hasOne
不适用于topicClass
我没有改变任何其他东西。除了我重启了intelliJ。在我打开这个问题之前我确实重新启动了它并且总是遇到同样的问题。所以我认为这个问题是基于IDE的!仍然会感谢提示如何避免这种情况
我有一个使用sequelize与SQLite的APP。
当我想在我的db-controller.js
中设置关联时,它告诉我,belongsTo
中的hasmany
和docu等关联函数不可用。
当我执行setupAssociations
函数并稍后检查db时,有模型但没有设置关联。
在这里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
并检查数据库之后,那么一切都是我想要的。
那么我在这做错了吗?
我发现我从另一个项目中获得了一个运行添加到导出功能注释的脚本
@type {{initTopic: (function(): Promise<*>), topicClass: Topic}}
这引起了这个问题。删除它使所有续集功能再次出现。