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
相关产品推荐
相关产品推荐

