【问题标题】:Sequelize Eager Loading ErrorSequelize 急切加载错误
【发布时间】:2018-03-18 18:21:27
【问题描述】:

我遇到了一个问题,即我的查询中的 include 不起作用,我不知道为什么。我有两个模型:问题和建议。

Question:
var Question = sequelize.define('Question', {
  }, {
    classMethods: {
      associate: function (models) {
        // associations can be defined here
        Question.belongsTo(models.User, {
          as: 'askerId',
          foreignKey: 'askerId'
        })

        Question.belongsTo(models.User, {
          as: 'winnerId',
          foreignKey: 'winnerId'
        })

        Question.hasMany(models.Suggestion)
        Question.hasMany(models.TagQuestion)
      }
    }
  })

建议:

var Suggestion = sequelize.define('Suggestion', {
    text: DataTypes.STRING
  }, {
    classMethods: {
      associate: function (models) {
        // associations can be defined here
        Suggestion.belongsTo(models.Question, {
          foreignKey: 'questionId',
          as: 'question'
        })

        Suggestion.belongsTo(models.User)

        Suggestion.hasMany(models.Vote)
      }
    }
  })

我尝试的查询在这里:

Question.findAll({
    include: [{
      model: models.Suggestion
    }]
  })

但我不断收到错误消息:SequelizeEagerLoadingError: Suggestion is not associated to Question!

为什么它们没有关联?它们在我的数据库中(基于我编写的迁移)。如果我目前做错了,我应该如何建立我的关联?我查看了其他有此问题的人,但无法弄清楚为什么我的关联是错误的。

【问题讨论】:

  • 你用的是什么版本的sequelize?如果 gt v4 在主题 How sequelize works? 中看到我的答案(在 sequelize v4 中删除了 classMethods 和 instanceMethods)
  • 是的,这很有帮助。我在连接表查询方面仍然存在一些问题(它已链接,但没有找到通过连接表链接的对象)。
  • 更新您的问题,添加您实际所做的示例。什么类型的协会?或者您对所有类型都有错误?你遇到了什么错误?
  • docs.sequelizejs.com/manual/tutorial/… 来自官方文档:如果关联有别名(使用 as 选项),则在包含模型时必须指定此别名。

标签: node.js postgresql sequelize.js


【解决方案1】:

我遇到了这个错误,因为我的语法不好。我正在使用

include: {
  model: db.modelOne,
  model: db.modelTwo
}

没有括号 []。包括它解决了错误。 无论如何,mentioned docs 提供了这个更简洁的选项来递归地包含所有外国模型:

User.findAll({ include: [{ all: true, nested: true }]});

【讨论】:

  • 为链接添加描述
【解决方案2】:

Sequelize 不再支持 classMethods。 classMethods 和 instanceMethods 被移除。

上一个:

const Model = sequelize.define('Model', {
    ...
}, {
    classMethods: {
        associate: function (model) {...}
    },
    instanceMethods: {
        someMethod: function () { ...}
    }
});

新:

const Model = sequelize.define('Model', {
    ...
});

// 类方法

Model.associate = function (models) {
    ...associate the models`enter code here`
};

参考:http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html#breaking-changes

【讨论】:

    【解决方案3】:

    请查看您的init-models.js,代码如下:

      question.hasMany(suggestion, { as: 'suggestion', foreignKey: 'questionId'});
      suggestion.belongsTo(question, { as: 'question', foreignKey: 'questionId'});
    

    存在吗?

    来自

    "sequelize": "^6.6.2"
    

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 2018-06-15
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2016-10-14
      • 2020-01-13
      • 2015-10-03
      相关资源
      最近更新 更多