我正在使用 this way将我的 Sequelize 模型保存在单独的文件中,一切都运行良好,但现在我想到了在其中包含范围的想法。
这样的东西是行不通的:
var User = sequelize.define("User", {...}, {
scopes: {
complete: {
include: [{
model: Task
}]
}
}
});
... 因为任务(当然)没有定义。即使使用 require('.').Task
在这一点上也无济于事,因为 User
在 Task
之前加载并且到 User
已加载,Task
尚未定义。
那么,有没有一种简单易行的方法,无需十几种变通办法
- 协会
- 包含的范围
- ...所有这些都在每个模型的单独文件中?
最佳答案
如果模型(任务)尚未加载? (在这种情况下,T 在 U 之前出现,模型已加载)。
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
成为
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
Object.keys(db).forEach(function(modelName) {
if ("loadScopes" in db[modelName]) {
db[modelName].loadScopes(db);
}
});
和模型
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("User", {
username: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
User.hasMany(models.Task)
}
}
});
return User;
};
成为
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("User", {
username: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
User.hasMany(models.Task)
}
loadScopes: function(models) {
User.addScope('complete', {
include: [{
model: models.Task
}]
})
}
}
});
return User;
};
关于node.js - 将 Sequelize 与包含在多个文件中的关联和范围一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407193/