簡體   English   中英

Sequelize.js:獲取多對多結點模型的關聯

[英]Sequelize.js: get association of many-to-many junction model

我有一些申請。 有一個角色,可以屬於多個組。 一個小組可以有很多角色,也有很多等級。 每個角色都有指定的等級。 各個組的排名不同。

角色模型:

module.exports = (sequelize, DataTypes) => {
  let Character = sequelize.define('Character', {
   /* attributes */
  }, {});
  Character.associate = (models) => {
    Character.hasMany(models.outfit, { foreignKey: 'owner' });
    Character.belongsToMany(models.group, { through: models.groupmember });
  };

  return Character;
};

組模型:

module.exports = (sequelize, DataTypes) => {
  let Group = sequelize.define('Group', {
    /* attributes */
  }, {});
  Group.associate = function (models) {
    Group.belongsToMany(models.character, { through: models.groupmember, as: 'members' });
    Group.hasMany(models.grouprank);
  };
  return Group;
};

GroupMember(連接表)模型:

module.exports = (sequelize, DataTypes) => {
  let GroupMember = sequelize.define('GroupMember', {
/* groupId, characterId are generated by sequelize */
    rankId: DataTypes.INTEGER
  }, {});
  GroupMember.associate = function (models) {
    GroupMember.belongsTo(models.grouprank, { foreignKey: 'rankId', targetKey: 'id' });
  };
  return GroupMember;
};

群組排名模型:(我的問題無關緊要)

  module.exports = (sequelize, DataTypes) => {
      let GroupRank = sequelize.define('GroupRank', {
// atributes
      }, {});
      GroupRank.associate = function (models) {
        GroupRank.belongsTo(models.group);
        GroupRank.hasMany(models.groupmember, { foreignKey: 'rankId' });
      };
      return GroupRank;
    };

我已將rankId列添加到聯結表,並且在檢索包含所有字符組以及其所具有的等級的角色時rankId問題。 我當前的代碼,該代碼返回角色,他所屬的組並進行排名,但是ALL屬於該組。 我只想要具有rankId指定的ID的等級。

database.character.findById(characterId, {
    include: [{
      model: database.group,
      through: database.groupmember,
      include: {
        model: database.grouprank,
       /* where: { id: '$GroupMember.rankId$' } */
      }
    }]
  }).then(result => {
  });

是的。 我知道它看起來很奇怪,它缺少CamelCase,但是我的問題是其他問題。 我嘗試使用where屬性進行查詢,但是Sequelize正在解析字符串,因此無法在其中放置列名。 我希望這個問題足夠穩定。 感謝您的時間!

我認為下面的代碼終於對我有用。 http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-literal

 database.character.findById(characterId, {
    include: [{
      model: database.group,
      through: database.groupmember,
      include: {
        model: database.grouprank,
        where: database.Sequelize.literal('`Groups->GroupRanks`.`id` = `Groups->GroupMember`.`rankId`')
      }
    }]
  })

編輯:最后,我決定按照此處所述重寫模型-> FindAll,其中包括涉及復雜的多對多(多對多)關系(sequelizejs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM