node js sequelize 在一个关联中获取 child 和 subchild

node js sequelize Getting child and subchild in one association

我的类别 table 有很多产品,而且产品 table 有很多图片

我可以单独拿到它们,但我想一次性把它们放在一起

 const categoriesList = await Categories.findAll({
        include:['myProducts']
           
    })

和我的关系如下

db.Products.hasMany(db.ProductImages,{as:"productImages",foreignKey: 'productId' })
db.Categories.hasMany(db.Products,{as:"myProducts",foreignKey:"categoryId"})

当我查询类别时,我可以通过什么方式获得带有图片的产品?

我试过原始查询

const resd=await db.sequelize.query("SELECT * FROM categories INNER JOIN products ON products.category=categories.id INNER JOIN productimages ON productimages.productId=products.id");
  res.json({re:resd})

它工作正常,但显然所有东西都显示在一起

我希望它们采用嵌套模式

预期行为:

{
"id": 1164,
"name": "Shirt",
"color": "red",
"myProducts":[{
"id":1,
"name": "raglan",
"price":"1200",
categoryId:1164,
"productImages":[{
id:12,
"image":"someimage.png",
"productId":1
}]
}] 

您可以在第一个 include 选项中使用嵌套的 include 选项:

 const categoriesList = await Categories.findAll({
        include:[{
          model: Products,
          as: 'myProducts',
          include: [{
            model: ProductImages,
            as: 'productImages'
          }]
        }]
    })

虽然我不建议加载 all-in-one 考虑到正在加载大量图像。