繁体   English   中英

Sequelize 自引用多对多; 如何指定我加入的内容

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

我有一个 Sequelize 结构,它通过Follow表将我的User表与自身关联,并带有followerfollowing 我有 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
  }
});

它返回一个用户和一个 Follow 条目数组。
我遇到的问题是,Sequelize 似乎默认创建Follow查询为where: { followING: User.id }而不是where: followER ,这样如果我有 1 个用户 FOLLOWING 自己和 2 个其他人,但只有FOLLOWED BY 他们自己,它只从我的 Follow 表中返回 1 个结果。 当我在我的种子中为少数用户循环访问主键时,我的结果中只有following值会发生变化,这样我只会返回用户的关注者,而不是用户关注的其他用户。
当多个列与我要加入的 Sequelize object 匹配时,有没有办法在include我尝试加入的特定列中指定?
我知道最坏的情况我总是可以跳过User步骤和 go 直接到

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

但这限制了我对用户 object 的立即访问,我必须编写一个额外的查询,考虑到存在自关联的多对多功能,这似乎很麻烦。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM