У меня есть приложение. Есть Персонаж, который может принадлежать многим группам. Группа может иметь много персонажей, а также много рангов. Каждый персонаж имеет определенный ранг. Ранги различаются по группам.
Модель персонажа:
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
.
database.character.findById(characterId, {
include: [{
model: database.group,
through: database.groupmember,
include: {
model: database.grouprank,
/* where: { id: '$GroupMember.rankId$' } */
}
}]
}).then(result => {
});
Да. Я знаю, это выглядит немного странно, в нем нет CamelCase, но моя проблема в другом. Я попытался выполнить запрос с атрибутом where
, но Sequelize анализирует строку, поэтому я не могу поместить туда имя столбца. Надеюсь вопрос достаточно нестабильный. Спасибо за ваше время!