Sequelize中Order与Product关联查询的参数过滤及方法报错问题
Sequelize中Order与Product关联查询的参数过滤及方法报错问题
嗨,我来帮你拆解这个问题,一步步解决你的疑惑~
一、先解决「order.getProduct is not a function」的报错问题
这个报错的核心原因是Sequelize会根据你定义的关联类型自动生成对应的实例方法:
- 如果你的
Order模型和Product模型是一对多关联(比如一个Order可以对应多个Product),那么Sequelize生成的查询关联数据的方法是复数形式:getProducts() - 只有当关联类型是一对一关联时,才会生成单数形式的
getProduct()方法
所以你现在调用单数方法会报错,就是因为当前的关联是一对多,不存在这个单数方法哦。
二、实现「给Order实例传productId参数过滤特定产品」的需求
你想要的类似GET /card/:productId的效果,其实可以通过在getProducts()方法中传入过滤条件来实现,直接给实例方法加查询选项就行:
// 传入where条件,过滤出id等于req.params.productId的产品 const targetProducts = await order.getProducts({ where: { id: req.params.productId }, // 如果确保productId唯一,可以加limit:1只返回一条结果 limit: 1 }); // 因为getProducts返回的是数组,取第一个元素就是你要的单个产品 const targetProduct = targetProducts[0];
这样就能精准拿到和当前Order关联的、id匹配的那一个Product啦~
额外小提示
如果你的关联定义时用了as别名(比如Order.hasMany(Product, { as: 'orderItems' })),那么生成的实例方法也会对应变成getOrderItems(),调用的时候要注意对应上别名哦。
备注:内容来源于stack exchange,提问作者Mehmet Baki
相关产品推荐
相关产品推荐

