【问题标题】:Error retrieving values from sequelize association从 sequelize 关联中检索值时出错
【发布时间】:2017-06-09 20:02:14
【问题描述】:

我需要从现有数据库中的两个关联模型中检索值。

模型大师

"use strict";

module.exports = (sequelize, DataTypes) => {
  var MasterPurchaseOrder = sequelize.define('master_purchase_order' , {
    id: {
    type: DataTypes.INTEGER(11),
    allowNull: false,
    primaryKey: true,
    autoIncrement: true,
    field: 'id'
  },
  requestedById: {
    type: DataTypes.INTEGER(11),
    allowNull: true,
    field: 'requested_by_id'
  },
  status: {
    type: DataTypes.STRING,
    allowNull: true,
    field: 'status'
  }
},{
  classMethods:{
    associate: (models) =>{
      MasterPurchaseOrder.hasMany(models.purchase_order,{
        as: 'purchase_order',
        foreignkey: 'master_purchase_order_id'
      });
    },
  },
}, {
    timestamps: true,
    paranoid: false,
    underscored: true,
    freezeTableName: true,
    tableName: 'master_purchase_orders'
  });

  return MasterPurchaseOrder;
}

采购订单模型

"use strict";

module.exports = (sequelize, DataTypes) => {
  var PurchaseOrder = sequelize.define('purchase_order' , {
    id: {
    type: DataTypes.INTEGER(11),
    allowNull: false,
    primaryKey: true,
    autoIncrement: true,
    field: 'id'
  },
  purchaseDate: {
    type: DataTypes.DATE,
    allowNull: true,
    field: 'purchase_date'
  },
  requestedById: {
    type: DataTypes.INTEGER(11),
    allowNull: true,
    field: 'requested_by_id'
  },
  masterPurchaseOrderId: {
    type: DataTypes.INTEGER(11),
    allowNull: true,
    field: 'master_purchase_order_id'
  }
 },{
  classMethods:{
    associate: (models) => {
      PurchaseOrder.belongsTo(models.master_purchase_order,{
        as: 'master_purchase_order',
        foreignkey: 'master_purchase_order_id'
      });
    },
  },
}, {
    timestamps: true,
    paranoid: false,
    underscored: true,
    freezeTableName: true,
    tableName: 'purchase_orders'
  });

  return PurchaseOrder;
}

这是我的采购订单控制器:

"using strict";
const purchaseOrder = require('../models/').purchase_order;
const MasterPurchaseOrder = require('../models/').master_purchase_order;

module.exports= {
  index(req, res) {
    purchaseOrder
      .findAll({
        include:[
        {model: MasterPurchaseOrder, as: 'master_purchase_order'}
      ]
      })
      .then((masters) => {
        res.status(200).json(masters);
      });
//      .catch((error) => {
//        res.status(500).json(error);
//      });
  },

};

我得到错误:

未处理的拒绝错误:master_purchase_order (master_purchase_order) 未与 purchase_order 关联!

任何建议

【问题讨论】:

  • 你是如何加载模型的?

标签: mysql node.js npm sequelize.js


【解决方案1】:

我正在覆盖我的子模型中的 classMethods 定义。

{
  classMethods:{
    associate: (models) => {
      PurchaseOrder.belongsTo(models.master_purchase_order,{
        as: 'master_purchase_order',
        foreignkey: 'master_purchase_order_id'
      });
      associate: (models) => {
      PurchaseOrder.belongsTo(models.suuplier,{
        as: 'supplier',
        foreignkey: 'supplier_id'
      });
    },
  },
}

正确的做法是:

{
  classMethods:{
    associate: (models) => {
      PurchaseOrder.belongsTo(models.master_purchase_order,{
        as: 'master_purchase_order',
        foreignkey: 'master_purchase_order_id'
      });
      PurchaseOrder.belongsTo(models.suuplier,{
        as: 'supplier',
        foreignkey: 'supplier_id'
      });
  },
}

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2016-04-11
    • 2011-09-16
    相关资源
    最近更新 更多