我有一个包含三个主要表的数据库:用户
,团队
,和由两个连接表连接的文件夹
,用户团队
和团队文件夹
。用户和团队之间以及团队和文件夹之间存在多对多关系(用户可以在多个团队中,团队可以拥有多个文件夹)。
Sequelize在管理用户团队和团队文件夹关系方面做得很好,但是我找不到在用户和文件夹之间建立关系的方法。
有没有办法不借助原始SQL跨两个连接表进行连接?
似乎没有办法优雅地或以合理的步骤完成这项工作。我尝试过像user这样的方法。getFolders()
,文件夹。findAll({include:[User]})
,但Sequelize似乎无法理解三级层次结构。
假设以下关系:
User.belongsToMany(Team, { through: 'users_teams'});
Team.belongsToMany(User, { through: 'users_teams'});
Folder.belongsToMany(Team, { through: 'teams_folders'});
Team.belongsToMany(Folder, { through: 'teams_folders'});
您应该能够使用嵌套一次加载所有内容,包括:
User.findAll({
include: [
{
model: Team,
include: [
Folder
]
}
]
});
你在帖子中给出的例子似乎已经在正确的轨道上了:)。您唯一需要更改的是,不是直接在包括
中传递User模型,而是传递一个带有模型属性和进一步嵌套的包括属性的对象
注意以下几点:
User.belongsToMany(Team, {
through: 'users_teams',
foreignKey: 'user_id',
otherKey: 'team_id'
});
Team.belongsToMany(User, {
through: 'users_teams',
foreignKey: 'team_id',
otherKey: 'user_id'
});