You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize多对多关联add方法失效问题求助

问题解决:Sequelize多对多关联添加关联时报错TypeError: currentOrder.addOrderProducts is not a function

错误原因

  1. findOrCreate返回的是数组,格式为[实例对象, 是否创建成功的布尔值],你直接把整个数组赋值给currentOrder,导致它不是Order模型实例,自然没有关联生成的方法。
  2. 多对多关联自动生成的添加方法名是基于关联模型名的,不是中间表名。你关联的是Product模型,所以方法应该是addProduct(单个)或addProducts(多个),而不是addOrderProducts。

修正后的代码

第一步:正确接收findOrCreate的返回值

let newOrder = null
        
const myuser = await User.findByPk('4455a5b1-08bf-4565-9a82-862cc5fdbd3c')

// 解构出订单实例和创建状态
const [currentOrder, created] = await Order.findOrCreate({ 
  where : { 
    UserId : '4455a5b1-08bf-4565-9a82-862cc5fdbd3c',
    onay : false, 
  } 
})

const productId = '5ba82614-7856-43ee-8262-0859081786ae'
const adet = 5
let foundProduct = await Product.findByPk(productId)

第二步:使用正确的关联添加方法

如果不需要传递中间表的额外字段(比如adet),直接调用:

let a = await currentOrder.addProduct(foundProduct)

如果需要给中间表OrderProducts添加adet数量字段,需要先修正关联配置,再传递参数:

修正关联配置

Order.belongsToMany(Product, { 
  through: {
    model: 'OrderProducts',
    unique: false
  },
  foreignKey: 'OrderId'
});
Product.belongsToMany(Order, { 
  through: {
    model: 'OrderProducts',
    unique: false
  },
  foreignKey: 'ProductId'
});

添加商品时传递数量参数

let a = await currentOrder.addProduct(foundProduct, {
  through: { adet: adet }
})

内容的提问来源于stack exchange,提问作者Mehmet Baki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:59:59