Sequelize多对多关联add方法失效问题求助
问题解决:Sequelize多对多关联添加关联时报错
TypeError: currentOrder.addOrderProducts is not a function 错误原因
findOrCreate返回的是数组,格式为[实例对象, 是否创建成功的布尔值],你直接把整个数组赋值给currentOrder,导致它不是Order模型实例,自然没有关联生成的方法。- 多对多关联自动生成的添加方法名是基于关联模型名的,不是中间表名。你关联的是
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
相关产品推荐
相关产品推荐

