簡體   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