You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize中查询Friend表如何获取关联的两位用户信息?

解决Friend表关联两个User实例的查询问题

嘿,这个问题我之前也碰到过!原因是你的Friend表和User表之间其实有两个独立的关联关系:一个是通过UserId关联发起好友请求的用户,另一个是通过idFriend关联被请求的用户。默认只include一次models.User的话,Sequelize只会映射其中一个关联,所以你只能拿到一方的信息。

第一步:先确保Friend模型定义了两个关联

你需要在Friend模型里给两个关联分别设置别名,让Sequelize能区分它们:

// 在Friend模型的关联定义中添加这两行
models.Friend.belongsTo(models.User, { 
  as: 'RequestInitiator', // 自定义别名,代表发起请求的用户(对应UserId)
  foreignKey: 'UserId' 
});
models.Friend.belongsTo(models.User, { 
  as: 'RequestedFriend', // 自定义别名,代表被请求的好友(对应idFriend)
  foreignKey: 'idFriend' 
});

第二步:修改查询代码,同时include两个关联

在findAll的include数组里,分别指定这两个带别名的关联:

models.Friend.findAll({
  where: {
    $or: [{ idFriend: userFound.id }, { UserID: userFound.id }],
    status: "pending"
  },
  include: [
    { model: models.User, as: 'RequestInitiator' }, // 获取发起请求的用户信息
    { model: models.User, as: 'RequestedFriend' }   // 获取被请求的好友信息
  ]
})

结果说明

这样查询返回的每个Friend实例里,就会包含RequestInitiator和RequestedFriend两个属性,分别对应UserId和idFriend关联的完整User信息啦。另外注意一下你的查询里UserID的大小写,要和模型里的字段名保持一致哦,避免匹配错误~

内容的提问来源于stack exchange,提问作者tetar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:37:01