Sequelize:包含through.attribute的模型

时间:2016-08-02 17:19:43

标签: javascript sequelize.js

是否可以通过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 /* */

请注意:所有这些Q& A的东西只是一个例子。我不可能不使用through关系。

2 个答案:

答案 0 :(得分:3)

  

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

您应该使用Nested eager loading。例如,您的查询可能类似于:

condition: function(e) {
  var isFirstOne = true;
  var feature = map.forEachFeatureAtPixel(e.pixel, function(feature) {
    var n = feature.get('name');
    // if n is undefined, feature is the current drawing one
    if (!!n) return feature;
  });
  return (!feature);
}

答案 1 :(得分:1)

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

`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 }
       ]
     ]
    });

`

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

当你尝试这个时告诉我