我正在开发一个快速 Sequelize 项目。
我遇到了 Sequelize 问题。
我有一个简单的架构,如文档所述:
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
但是当我使用 include 进行查询时
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
但是应该说用户与任务没有关联
(错误的github:https://github.com/sequelize/sequelize/blob/master/lib/model.js#L711)
这就像 Model 类没有实例化......
我的代码可能有什么问题?也许事实是通过 sequelize.models[modelName]
调用模型?我为此苦苦挣扎了很长时间......
谢谢。
<小时/>更多信息:
Sequelize 版本:^5.7.0
架构:
在应用程序启动时,我的所有模型都存储在我的流程中存储的自定义数据库类中。
在任何 Controller 内,我都会调用一个存储库类,例如使用如下所示的方法,其中可以通过 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 {};
最佳答案
好的。
在阅读sequelize代码时,我发现算法内部需要options.model
。
问题是我也在查询选项中发送了模型,但作为模型名称(字符串)。
算法将option.model转化为Model
的实例对象来进行处理。
所以我只需重命名作为查询选项传递的变量。
这行代码是问题所在: https://github.com/sequelize/sequelize/blob/master/lib/model.js#L493
if (!options.model) options.model = this;
关于node.js - “myTable”未与模型关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55761585/