【发布时间】:2019-03-13 12:06:13
【问题描述】:
假设我有以下模型:
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。
【问题讨论】:
标签: javascript sql node.js sequelize.js hapi