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

Sequelize-Typescript同表多对多关联查询following结果异常

Sequelize 社交网络关注功能多对多关联查询异常修复

我在实现社交网络的用户关注功能时,用Sequelize定义了Follow中间模型:

export default class Follow extends Model {
    @PrimaryKey
    @ForeignKey(() => User)
    @Column(DataType.UUID)
    followerId: string;

    @PrimaryKey
    @ForeignKey(() => User)
    @Column(DataType.UUID)
    followeeId: string;
}

接着在User模型里配置了多对多关联,用来关联用户的"关注列表"和"粉丝列表":

@BelongsToMany(() => User, () => Follow, 'followerId')
following: User[]

@BelongsToMany(() => User, () => Follow, 'followeeId')
followers: User[]

但执行查询时出现问题:

const me = await User.findByPk('1230ae30-dc4f-4752-bd84-092956f5c633', {
    include: [
        {
            model: User,
            as: 'followers'
        },{
            model: User,
            as: 'following'
        }
    ] 
})

查询结果里followers数据正常,但following数组只返回当前用户自己,可数据库里明明记录了该用户关注了3位其他用户。查看Sequelize生成的SQL后发现,关联的JOIN条件错误。

最终通过给@BelongsToMany添加otherKey参数解决了问题,正确的关联配置如下:

@BelongsToMany(() => User, () => Follow, 'followeeId', 'followerId')
followers: User[]

@BelongsToMany(() => User, () => Follow, 'followerId', 'followeeId')
following: User[]

原因说明

Sequelize的@BelongsToMany装饰器中,第三个参数是当前模型在中间表的外键,第四个参数是关联目标模型在中间表的外键。之前只指定了第三个参数,Sequelize自动推断的otherKey不符合业务逻辑,导致JOIN条件错误,查询结果异常。明确指定两个外键参数后,关联逻辑才正确匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:42:34