Sequelize 包含选项无法获取其他模型

问题描述

我有两个相互关联的模型(order_items.js & products.js)productId作为order_items中的外键,代码如下:

order_items.js

const { DataTypes } = require('sequelize')
const db_config = require(`../config/config`)
const Product = require('./product')

const OrderItem = db_config.define('order_item',{
productId : { type: DataTypes.INTEGER,allowNull:false,references: {model: Product,key: 'id'} },quantity: { type: DataTypes.INTEGER }
},{
freezeTableName: true
})


module.exports = OrderItem

product.js

const { DataTypes } = require('sequelize')
const db_config = require(`../config/config`)
const Category = require('./category')

const Product = db_config.define('product',{
productName : { type: DataTypes.STRING,allowNull:false },productPrice: { type: DataTypes.INTEGER,productDescription: { type: DataTypes.STRING,allowNull:true },productimage: { type: DataTypes.STRING,productStock: { type: DataTypes.INTEGER,validate: { min: 0 },defaultValue: 0,allowNull: false },CategoryId: { type: DataTypes.INTEGER,defaultValue: 1,references: {model: Category,key: 'id'}}
},{
freezeTableName: true

})

module.exports = Product

order_routes.js

router.get('/',async (req,res) => {
try {
  const dataList =  await OrderItem.findAll({include: [{model:Product,required:true}]})
  res.send({
      status: "success",message: "data found",data: dataList
  }) 
} catch (err) {
    res.send({
        status: "Failed",message: err})
}
})

结果邮递员

enter image description here

有人可以帮忙吗?我想要做的是,当我得到 order_item 时,它也会得到产品指的是产品的 id

解决方法

模型定义中的关联在哪里?我在列字段上看到了一个参考,但您还需要单独执行以下定义

内部订单项模型文件

    OrderItem.associate = models => {

        OrderItem.belongsTo(Product,{as: "product",foreignKey: "productId",sourceKey: "id"});

};

内部产品模型文件

    Product.associate = models => {

        Product.hasMany(OrderItem,{as: "orders",sourceKey: "id"});

};


另外,我建议您也将价格存储在 OrderItem 集合中,以防将来产品价格更改时,您过去的订单数据不会不正确。