使用Sequelizejoin多个联结表

我有一个包含三个主表的数据库:由两个联结表users_teamsteams_folders连接的usersteamsfolders 。 用户和团队之间以及团队和文件夹之间存在多对多的关系(用户可以在多个团队中,团队可以拥有多个文件夹)。

Sequelize在pipe理用户团队和团队 – 文件夹关系方面performance出色,但我无法find在用户和文件夹之间build立关系的方法。

有没有办法通过两个联结表join而不诉诸原始的SQL?

似乎没有办法完成这个优雅或在一个合理的步骤。 我尝试了像user.getFolders()Folder.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 ] } ] }); 

你似乎已经在你的post中给出的例子已经在正确的轨道:)。 唯一需要改变的不是直接在include中传递User模型,而是使用model属性和另一个嵌套的include属性传递一个对象

注意以下几点:

  • 定义两个方向的关系
  • 检查你有正确的顺序 foreignKey,otherKey
 User.belongsToMany(Team, { through: 'users_teams', foreignKey: 'user_id', otherKey: 'team_id' }); Team.belongsToMany(User, { through: 'users_teams', foreignKey: 'team_id', otherKey: 'user_id' });