假设我有以下模型:
const Item = sequelize.define("Item", {
active: { type: DataTypes.BOOLEAN, defaultValue: true },
name: { type: DataTypes.STRING, allowNull: false },
description: { type: DataTypes.TEXT }
});
const Partner = sequelize.define("Partner", {
active: { type: DataTypes.BOOLEAN, defaultValue: true },
name: { type: DataTypes.STRING, allowNull: false },
});
我通过以下方式将它们关联:
models.Item.belongsToMany(models.Partner, {
as: "vendors",
through: "PartnerDefaultItems"
});
models.Partner.belongsToMany(models.Item, {
as: "items",
through: "PartnerDefaultItem"
});
我想我的模型和关联还可以,因为它将在数据库中创建带有项目和合作伙伴ID的新表。
现在!我正在通过过滤进行服务器端分页,当我选择一个或多个伙伴时,我只想返回与所选伙伴关联的那些项目。
我可以只执行一个查询吗?
例如:我的前端发送一个带有partnerId:1 ...
的请求const res = await db.models.Item.findAll({
where: {select every item with associated partnerId}
});
//-关联表示例-//
partner_id:1 item_id:1 => partner.partnerId等于partner_id,因此请选择item.id = item_id
partner_id:2 item_id:2 => partner.partnerId不等于,请勿选择
等...
重点是对此使用单个查询,而没有任何原始sql。
答案 0 :(得分:0)
您的查询结构应include
相关表,并为您的through
指定where
关系和partnerId
。您可以启用logging: true
在控制台中显示SQL查询以进行进一步调试。
const res = await db.models.Item.findAll({
include: [
{
model: db.models.Parter,
as: 'partners',
through: 'PartnerDefaultItem',
where: {
id: partnerId,
},
},
],
});