【问题标题】:Sequelize include options cannot get another modelsSequelize 包含选项无法获取其他模型
【发布时间】:2021-02-20 01:32:11
【问题描述】:

我有两个属于彼此的模型(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, allowNull:false },
productDescription: { type: DataTypes.STRING, allowNull:true },
productImage: { type: DataTypes.STRING, allowNull:true },
productStock: { type: DataTypes.INTEGER, validate: { min: 0 }, defaultValue: 0, allowNull: false },
CategoryId: { type: DataTypes.INTEGER, allowNull:false, 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})
}
})

邮递员的结果

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

【问题讨论】:

    标签: mysql sql node.js sequelize.js sequelize-cli


    【解决方案1】:

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

    在 OrderItem 模型文件中

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

    内部产品模型文件

        Product.associate = models => {
    
            Product.hasMany(OrderItem, {as: "orders", foreignKey: "productId", sourceKey: "id"});
    
    };
    
    
    

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

    【讨论】:

    • 听从你的建议后,我收到了同样的结果
    • 请用最新的更新更新上面的代码,这样我就能看到问题了。
    • 您好,它确实有效,我放下所有表格并使用了您的解决方案并且它有效。谢谢人:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2016-11-29
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多