Sequelize self-referential many-to-many;如何指定我加入的内容

Sequelize self-referential many-to-many; how to specify what I'm joining on

我有一个 Sequelize 结构,它通过 Follow table、followerfollowing 将我的 User table 与其自身相关联.我 99% 确定我拥有所有必要的部分,可以按照我期望的方式工作;我有别名

User.belongsToMany(models.User, { through: models.Follow, as: 'Followers', foreignKey: 'follower'});
User.belongsToMany(models.User, { through: models.Follow, as: 'Following', foreignKey: 'following'});

以及

User.hasMany(models.Follow, { foreignKey: 'following' });
User.hasMany(models.Follow, { foreignKey: 'follower' });

Follow.belongsTo(models.User, { foreignKey: 'following', as: 'Following' });
Follow.belongsTo(models.User, { foreignKey: 'follower', as: 'Follower' });

而且我可以打电话给

User.findByPk(id, {
  include: {
    model: Follow
  }
});

其中 returns 一个用户和一组关注条目。
我遇到的问题是,Sequelize 似乎默认将 Follow 查询创建为 where: { followING: User.id } 而不是 where: followER,这样如果我有 1 个用户关注自己和其他 2 个用户,但只有他们自己关注,它只有 returns 1 个来自我的关注 table。当我循环遍历种子中少数用户的主键时,结果中只有 following 值发生变化,因此我只返回用户的关注者,而不返回该用户的其他用户正在关注。
当多个列与我要加入的 Sequelize 对象匹配时,有没有办法在 include 中指定我要加入的特定列?
我了解最坏的情况,我总是可以跳过 User 步骤并直接转到

Follow.findAll({
  where: {
    follower: id
  }
})

但这限制了我对 User 对象的直接访问,我不得不编写一个额外的查询,考虑到存在自关联的多对多功能,这似乎很麻烦。

如果您希望获得拥有关注者或关注者的用户,则无需指明 Follow table。您只需要指明所需关联的别名:

User.findByPk(id, {
  include: {
    model: User,
    as: 'Followers'
  }
});
User.findByPk(id, {
  include: {
    model: User,
    as: 'Following'
  }
});

如果您需要直接包含 Follow,您需要添加这样的关联:

User.hasMany(models.Follow, { as: 'FollowerLinks', foreignKey: 'follower'});
User.hasMany(models.Follow, { as: 'FollowingLinks', foreignKey: 'following'});

并且您还应该指明一个别名,这样 Sequelize 就会知道要使用什么关联:

User.findByPk(id, {
  include: {
    model: Follow,
    as: 'FollowerLinks'
  }
});