Javascript 将自我参照多对多进行续集;如何指定I';我加入

Javascript 将自我参照多对多进行续集;如何指定I';我加入,javascript,sequelize.js,Javascript,Sequelize.js,我有一个Sequelize结构,它通过一个Follow表将我的用户表与自身关联,并带有follower和following。我99%确信,我已经具备了所有必要的部件,可以按照我期望的方式工作;我有化名 User.belongsToMany(models.User, { through: models.Follow, as: 'Followers', foreignKey: 'follower'}); User.belongsToMany(models.User, { through: model

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

我可以打电话给你

User.findByPk(id, {
  include: {
    model: Follow
  }
});
它返回一个用户和一个Follow条目数组。
我遇到的问题是,Sequelize似乎默认创建
Follow
查询为
where:{followING:User.id}
,而不是
where:followER
,这样,如果我有一个用户跟随他们自己和两个其他人,但只跟随他们,它只从我的followING表返回一个结果。当我在seed中循环浏览少数用户的主键时,结果中只有
following
值发生变化,因此我只返回用户的追随者,而不是用户正在跟踪的其他用户。
当多个列与我要加入的Sequelize对象匹配时,是否有方法在包含中指定我要加入的特定列 我理解最坏的情况,我总是可以跳过
User
步骤,直接进入

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

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

如果您希望获得一个有追随者的用户或有追随者的用户,则无需指示
Follow
表。您只需指示所需关联的别名:

User.findByPk(id{
包括:{
型号:用户,
如:“追随者”
}
});
User.findByPk(id{
包括:{
型号:用户,
如:'以下'
}
});
如果需要包含
直接遵循
,则需要添加如下关联:

User.hasMany(models.Follow, { as: 'FollowerLinks', foreignKey: 'follower'});
User.hasMany(models.Follow, { as: 'FollowingLinks', foreignKey: 'following'});
您还应该指出一个别名,这样Sequelize就会知道要使用什么关联:

User.findByPk(id{
包括:{
型号:Follow,
如:“FollowerLinks”
}
});

如果您希望获得一个有追随者的用户或有追随者的用户,则无需在
Follow
表中指明。您只需指示所需关联的别名:

User.findByPk(id{
包括:{
型号:用户,
如:“追随者”
}
});
User.findByPk(id{
包括:{
型号:用户,
如:'以下'
}
});
如果需要包含
直接遵循
,则需要添加如下关联:

User.hasMany(models.Follow, { as: 'FollowerLinks', foreignKey: 'follower'});
User.hasMany(models.Follow, { as: 'FollowingLinks', foreignKey: 'following'});
您还应该指出一个别名,这样Sequelize就会知道要使用什么关联:

User.findByPk(id{
包括:{
型号:Follow,
如:“FollowerLinks”
}
});

我没有看到像
User.hasMany(models.Follow
这样的关联。它到底应该如何工作?@Anatoly我编辑了我的问题-我有两个用户。hasMany关联如下我没有看到像
User.hasMany这样的关联(models.Follow
。它到底应该如何工作?@Anatoly我编辑了我的问题-我有两个用户。Follow有很多关联我编辑了我的问题以包括用户。我有很多关联,就像我已经有过的,但它们没有像你建议的那样别名。你用一个答案解决了我的两个问题。Stellar。我编辑了我的问题。)要包括用户的问题。我已经有很多关联,但它们没有你建议的别名。你用一个答案解决了我的两个问题。Stellar。