如何通过Sequelize单查询获取指定商家的所有商品问题?
使用Sequelize单查询获取商家所有商品的问题
首先确保你的Sequelize模型已经正确定义关联关系:
- 商家(Vendors)与商品(Products):一对多关联
Vendors.hasMany(Products, { foreignKey: 'vendorId' }); Products.belongsTo(Vendors, { foreignKey: 'vendorId' }); - 商品(Products)与问题(Questions):一对多关联
Products.hasMany(Questions, { foreignKey: 'productId' }); Questions.belongsTo(Products, { foreignKey: 'productId' });
接下来可以通过两种方式实现单查询需求:
方式1:查询商家信息,同时嵌套获取所有商品及对应问题
如果需要展示商家、商品、问题的层级结构,用这种方式:
const vendorData = await Vendors.findByPk(传入的商家ID, { include: [ { model: Products, include: [Questions] // 嵌套查询商品对应的所有问题 } ] });
返回结果中,vendorData.products是该商家的所有商品数组,每个商品对象里的questions字段就是对应商品的全部问题。
方式2:直接查询该商家所有商品的问题(含商品信息)
如果只需要问题列表并附带对应商品信息,用这种方式更直接:
const allQuestions = await Questions.findAll({ include: [ { model: Products, include: [ { model: Vendors, where: { id: 传入的商家ID } // 通过商家ID过滤 } ] } ] });
返回的allQuestions就是该商家所有商品的问题集合,每个问题对象里包含对应的product和vendor信息。
两种方式都是通过Sequelize自动生成JOIN语句,仅执行一次数据库查询,避免了两次查询加遍历的低效操作。
内容的提问来源于stack exchange,提问作者Roohullah Kazmi
相关产品推荐
相关产品推荐

