【发布时间】:2019-04-23 20:29:51
【问题描述】:
我正在做一个快速续集项目。
我遇到了续集问题。
我有一个简单的架构,就像文档说的那样:
class Task extends Model {}
Task.init({ title: Sequelize.STRING }, { sequelize, modelName: 'task' });
class User extends Model {}
User.init({ username: Sequelize.STRING }, { sequelize, modelName: 'user' });
User.hasMany(Task); // Will add userId to Task model
Task.belongsTo(User); // Will also add userId to Task model
但是当我使用包含查询时
sequelize.models['task'].findAll({include:[{all:true}]});
我面临一些问题:
第一个:
this._getIncludedAssociation is not a function
这里是github源码:https://github.com/sequelize/sequelize/blob/master/lib/model.js#L615
我只是将this 更改为Model 来检查。
这个错误消失了,但出现了第二个(与第一个相关,因为我改变了行为)
User is not associated to Model
但应该是User is not associated to Task
(错误的github:https://github.com/sequelize/sequelize/blob/master/lib/model.js#L711)
好像模型类没有实例化......
我的代码有什么不好的地方?也许是通过sequelize.models[modelName] 调用模型的事实??我为此苦苦挣扎了很长时间......
谢谢。
更多信息:
续集版本 : ^5.7.0
架构:
在应用程序启动时,我的所有模型都存储在我的进程中存储的自定义数据库类中。
在任何控制器中,我调用一个存储库类,例如使用如下方法,其中所需模型可通过this.model 访问:
findAll(options, force = false) {
let data = this.performExtraOptions(options);
data.paranoid = force;
if (this.isDebug) {
this.req.debug.addDatabaseCall('Table ' + this.model.getTableName() + ' findAll', data);
}
return this.model.findAll(data);
}
当我使用 Chrome 调试器进行检查时,模型显示如下:
const model = class extends Model {};
【问题讨论】:
-
您能告诉我们您正在使用的续集版本吗?我尝试过同样的情况,它工作正常,我使用 5.7.1。如有必要,我可以向您展示示例代码和结果。
-
当然:“续集”:“^5.7.0”
-
能否调试或打印“this.model”的JSON,看看它是否是您期望的对象?
-
@troy 完成了
-
我很困惑,它是一个后端服务器,你怎么能使用 Chrome 调试器?让我们在chat.stackoverflow.com/rooms/192197/problem-of-using-sequelize继续这个讨论
标签: node.js express sequelize.js