【问题标题】:Sequelize: Include model of through.attributeSequelize:包含 through.attribute 的模型
【发布时间】:2021-04-16 07:15:03
【问题描述】:

是否可以通过through 为多对多关系的属性包含模型?

假设我有以下模型:

User = sequelize.define('user', {/* attributes */});
Question = sequelize.define('question', {/* attributes */});
Answer = sequelize.define('answer', {/* attributes */});

/* Where */
Question.hasMany(Answer);
Answer.belongsTo(Question);

我想为每个用户保存他对问题的回答。所以我添加了以下关系:

UserQuestionAnswerRel = sequelize.define('usersAnwers', {
  user: {/**/},
  question: {/**/},
  answer: {/**/}
});

User.hasMany(Question, { through: UserQuestionAnswerRel });

现在我想查询一个用户,该用户收到他回答的所有问题以及他给出的答案。但这是如何工作的?不幸的是,这不起作用:

User.findAll({
  include: {
    model: Question,
    through: { include: model.Answer }
  }
}).then /* */

请注意:所有这些问答内容只是一个示例。我不可能不使用through 关系。

【问题讨论】:

  • 有趣。对不起,我还没有答案。但想知道它是否与我的问题相似。 stackoverflow.com/questions/38714624/…我本质上想访问“通过”模型并过滤“内部”连接中留下的记录
  • 你能解释一下为什么你必须使用through吗?这应该与 Nested eager loading... 直接相关

标签: javascript sequelize.js


【解决方案1】:

我想查询一个用户,收到他回答的所有问题和他给出的答案

您应该使用Nested eager loading。例如,您的查询可能是这样的:

User.findAll({
  include: {
    model: UserQuestionAnswerRel,
    include: [
      { model: Question },
      { model: Answer }
    ]
  }
}).then...

【讨论】:

    【解决方案2】:

    我认为看待这个问题的方式是:

    `User.hasMany(Question); //this gives every question a userId
     Question.belongsTo(User);
     User.hasMany(Answer); //this gives every answer a userId
     Answer.belongsTo(User);
     Question.hasMany(Answer); //this gives every answer a questionId
     Answer.beongsTo(Question);
    

    `

    因此,让用户收到他回答的所有问题以及他给出的答案的查询将如下所示:

     `User.findAll({
      where: {
         id: userId
       },
       include: [
        { model: Answer },
           include: [
           { model: Question }
           ]
         ]
        });
    

    `

    此查询从 users 表中选择具有供应商 ID (userId) 的用户,并包括属于该用户的所有答案,还包括属于所包含的每个答案的所有问题。

    当你尝试这个时告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2017-12-08
      • 2015-09-06
      • 1970-01-01
      相关资源
      最近更新 更多