提问者:小点点

使用序列化跨多个连接表连接


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

Sequelize在管理用户团队和团队文件夹关系方面做得很好,但是我找不到在用户和文件夹之间建立关系的方法。

有没有办法不借助原始SQL跨两个连接表进行连接?

似乎没有办法优雅地或以合理的步骤完成这项工作。我尝试过像user这样的方法。getFolders()文件夹。findAll({include:[User]}),但Sequelize似乎无法理解三级层次结构。


共2个答案

匿名用户

假设以下关系:

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'
});