如何使用Sequelize包含多个其他表?

时间:2019-04-14 08:25:47

标签: node.js postgresql express sequelize.js

我有下表:

Product:
name: string, description: string, image: string

Brand:
name: string

Category:
name: string

一个产品只能有一个品牌。 一种产品可以具有多个类别。

我的关联是:

models/product.js:
Product.associate = function(models) {
    Product.hasOne(models.Brand, {
      foreignKey: "productId",
      as: "brand"
    }),
      Product.hasMany(models.Category, {
        foreignKey: "productId",
        as: "categories"
      });
  }
models/category.js:
Category.belongsTo(models.Product, {
      foreignKey: "productId",
      onDelete: "CASCADE"
    })
models/brand.js:
Brand.belongsTo(models.Product, {
      foreignKey: "productId",
      onDelete: "CASCADE"
    })

1-到目前为止还可以吗?对我来说,models / product.js中的缩进似乎很奇怪。

2-在“我的产品”控制器中,如何检索我的产品的品牌和类别? 目前我有:

controllers/products.js:
list(req, res) {
    return Product.findAll({
      include: [
        {
          model: Category,
          as: "categories"
        }
      ]
    })
      .then(products => res.status(200).send(products))
      .catch(error => res.status(400).send(error));
  }

包括类别,我如何也包含品牌?

我希望输出结果是一系列包含一个品牌和一个或多个类别的产品。

1 个答案:

答案 0 :(得分:1)

鉴于已建立的关联,您应该可以添加另一个逗号分隔的模型,如下所示:

controllers/products.js:
list(req, res) {
    return Product.findAll({
      include: [
        {
          model: Category,
          as: "categories"
        },
        {
          model: Brand,
          as: "brand"
        }
      ]
    })
      .then(products => res.status(200).send(products))
      .catch(error => res.status(400).send(error));
  }