我有三个模型user
,tab
,subscription
。用户可以订阅许多标签,标签可以有很多订阅者。
user --* subscription *-- tab
navicat的图表
sequelize.define('subscription', {})
Tab.belongsToMany(User, { through: Subscription })
User.belongsToMany(Tab, { through: Subscription })
如何获取特定标签的所有订阅者或特定用户订阅的所有标签? 我可以在两个查询中执行此操作,但必须在一个查询中。
我尝试了where
,include
,through
的所有可能组合,我不想在此分享。每当我尝试从任何一方访问订阅时,我都会subscription (subscriptions) is not associated to user
。
我试图让这样的事情发挥作用。
await Tab.findAll({
where: { name: ctx.params.tabname },
include: [{
model: Subscription,
through: {
where: { userUsername: ctx.params.username }
}
}]
})
答案 0 :(得分:2)
belongsToMany的问题是直接创建到目标实体的链接。因此,要获得特定选项卡的所有用户,您必须执行
Tab.findAll({
include: [{
model: User
}]
});
当您不想从订阅实体获取任何数据时,这是有效的。
如果您想从订阅实体中选择任何数据,则需要稍微修改您的关系。
Tab.hasMany(Subscription);
Subscription.belongsTo(Tab);
User.hasMany(Subscription);
Subscription.belongsTo(User);
这将创建从制表符到订阅的一对多关系,并添加从订阅到制表符的向后绑定。对用户来说也是一样。
然后,您可以查询特定选项卡的所有订阅(包含用户信息),或查询特定用户的所有订阅(使用选项卡信息),如下所示:
Tab.findAll({
include: [{
model: Subscription,
include: [{
model: User
}]
}]
});
User.findAll({
include: [{
model: Subscription,
include: [{
model: Tab
}]
}]
});
我希望有所帮助!