![](/img/trans.png)
[英]Association model not showing in many to many association sequelize.js node
[英]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.