gpt4 book ai didi

javascript - Sequelize belongsToMany where过滤器

转载 作者:行者123 更新时间:2023-12-03 22:39:11 27 4
gpt4 key购买 nike

假设我有以下模型:

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。

最佳答案

您的查询结构应该 include 相关表并指定 through 关系以及 wherepartnerId 。您可以启用 logging: true 以在控制台中显示 SQL 查询以进行进一步调试。

const res = await db.models.Item.findAll({
include: [
{
model: db.models.Parter,
as: 'partners',
through: 'PartnerDefaultItem',
where: {
id: partnerId,
},
},
],
});

关于javascript - Sequelize belongsToMany where过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52708699/

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