我正在尝试使用标签(查找)表在Sequelize中为我的Postgres表设置多对多的关系。我成功地建立了这种关系。
现在我的查找表有一个附加字段,它是另一个表的外键。我希望该表的数据包含在我的结果集中。这是我很难搞清楚语法的地方。
我的模特:
Models.user = sequelize.define('user', { //attributes});
Models.school = sequelize.define('school', { //attributes });
Models.role = sequelize.define('role', { //attributes });
Models.userSchools = sequelize.define('user_school', {
user_school_id: { type: Sequelize.INTEGER, primaryKey: true }
});
Models.user.belongsToMany(Models.school, { through: Models.userSchools, foreignKey: 'user_id', otherKey: 'school_id' });
Models.school.belongsToMany(Models.user, { through: Models.userSchools, foreignKey: 'school_id', otherKey: 'user_id' });
Models.userSchools.belongsTo(Models.role, { foreignKey: 'role_id' });
工作查询:此查询为我提供了所有用户及其学校。
Models.user.findAll({
where: {
//condition
},
include: [Models.school]
})
现在我想把每个学校的角色都包括在内。以下查询均无效。
Models.user.findAll({
where: {
//conditions
},
include: [Models.schools, Models.role]
})
上面的查询引发了一个错误,指出角色与用户无关,这是预期的。
Models.user.findAll({
where: {
//conditions
},
include: [Models.schools, {model: Models.userSchools, include: Models.role}]
})
此查询也会抛出错误:
" userSchools与用户"。
无关
任何人都可以帮助我了解如何从userSchools模型中获取角色信息吗?
我添加了"通过"条件,它获取role_id但不是相关的角色数据。
Models.user.findAll({
where: {
//conditions
},
include: [{
model: Models.school,
as: 'schools',
through: {
attributes: ['role_id']
}
}]
})