[英]filter Sequelize belongsToMany get<Association> association table
[英]sequelize belongsToMany where filter
假设我有以下模型:
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,其中item.id = item_id
partner_id:2 item_id:2 => partner.partnerId不等于,请勿选择
等等...
关键是为此使用单个查询,而无需任何原始sql。
您的查询结构应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,
},
},
],
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.