【问题标题】:'myTable' is not associated to Model'myTable' 未关联到模型
【发布时间】: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


【解决方案1】:

好的。

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

问题是我也在查询选项中发送了模型,但是作为模型名称(字符串)。

算法,将option.model转化为Model的实例对象来制作流程。

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多