gpt4 book ai didi

postgresql - 如何查询自定义连接表

转载 作者:行者123 更新时间:2023-12-03 22:23:58 25 4
gpt4 key购买 nike

我有三个型号user , tab , subscription .用户可以订阅很多标签,标签可以有很多订阅者。user --* subscription *-- tab
来自navicat的图

enter image description here

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 }
}
}]
})

最佳答案

belongsToMany 的问题是直接创建到目标实体的链接。因此,要让所有用户使用特定选项卡,您必须这样做

Tab.findAll({
include: [{
model: User
}]
});

当您真的不想从订阅实体获取任何数据时,这很有效。

如果您想从订阅实体中选择任何数据,您需要稍微修改您的关系。
Tab.hasMany(Subscription);
Subscription.belongsTo(Tab);

User.hasMany(Subscription);
Subscription.belongsTo(User);

这将创建从选项卡到订阅的一对多关系,并添加从订阅到选项卡的反向绑定(bind)。对用户来说也是一样的。

然后,您可以查询特定选项卡的所有订阅(带有用户信息)或特定用户的所有订阅(带有选项卡信息),如下所示:
Tab.findAll({
include: [{
model: Subscription,
include: [{
model: User
}]
}]
});

User.findAll({
include: [{
model: Subscription,
include: [{
model: Tab
}]
}]
});

我希望这会有所帮助!

关于postgresql - 如何查询自定义连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35826684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com