“ myTable”未与模型

时间:2019-04-19 12:06:19

标签: node.js express sequelize.js

我正在做一个快速续集项目。

我在续集方面遇到问题。

我有一个简单的架构,如文档所述:

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

但是应该说User is not associated to Task

(错误的github:https://github.com/sequelize/sequelize/blob/master/lib/model.js#L711

就像Model并没有实例化...

我的代码中可能有什么不好的地方?也许事实是通过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 {};

enter image description here

1 个答案:

答案 0 :(得分:1)

好的。

在阅读续集代码时,我发现算法内部需要options.model

问题是我也通过查询选项发送了模型,但以模型名称(字符串)的形式发送了。

算法,将option.model转换为Model的实例对象以进行处理。

所以我只需要重命名作为查询选项传递的变量。

这行代码就是问题所在: https://github.com/sequelize/sequelize/blob/master/lib/model.js#L493

 if (!options.model) options.model = this;