Sequelize从belongsTo关系中获取值

时间:2017-01-23 22:03:39

标签: mysql node.js npm sequelize.js

我正在使用Mysql中的现有数据库创建一个应用程序。 我可以从表中检索值,但是当我尝试从关联模型中检索值时,它不起作用。

采购订单模型:

"use strict";

module.exports = (sequelize, DataTypes) => {
  var PurchaseOrder = sequelize.define('purchase_orders' , {
    id: {
    type: DataTypes.INTEGER(11),
    allowNull: false,
    primaryKey: true,
    autoIncrement: true,
    field: 'id'
  },
  purchaseDate: {
    type: DataTypes.DATE,
    allowNull: true,
    field: 'purchase_date'
  },
  supplierId: {
    type: DataTypes.INTEGER(11),
    allowNull: true,
  //  references: {
//      model: 'suppliers',
//      key: 'id'
//    },
    field: 'supplier_id'
  },
  requestedById: {
    type: DataTypes.INTEGER(11),
    allowNull: true,
    field: 'requested_by_id'
  },
  masterPurchaseOrderId: {
    type: DataTypes.INTEGER(11),
    allowNull: true,
//    references: {
//      model: 'master_purchase_orders',
//      key: 'id'
//    },
    field: 'master_purchase_order_id'
  },
  createdAt: {
    type: DataTypes.DATE,
    allowNull: false,
    field: 'created_at'
  },
  updatedAt: {
    type: DataTypes.DATE,
    allowNull: false,
    field: 'updated_at'
  }
 },{
  classMethods:{
    associate: (models) => {
      PurchaseOrder.belongsTo(models.masterPurchaseOrders,{
        foreignkey: 'master_purchase_order_id'
      });
    },
    associate: (models) => {
      PurchaseOrder.belongsTo(models.supplier,{
        foreignkey: 'supplier_id'
      });
    },
  },
}, {
    timestamps: true,
    paranoid: false,
    underscored: true,
    freezeTableName: true,
    tableName: 'purchase_orders'
  });

  return PurchaseOrder;
}

采购订单控制器:

"using strict";
const purchaseOrder = require('../models/').purchase_orders;
const Supplier = require('../models/').supplier;
const Master = require('../models/').masterPurchaseOrders;

module.exports= {
  index(req, res) {
    purchaseOrder
      .findAll({
        include:[Supplier, Master]
      })
      .then((masters) => {
        res.status(200).json(masters);
      })
      .catch((error) => {
        res.status(500).json(error);
      });
  },
  create(req, res) {
    purchaseOrder
      .create(req.body)
      .then( master => {
        res.status(200).json(master);
      })
      .catch( error => {
        res.status(500).json(error);
      });
  },
};

如果我只在函数findall()中包含模型供应商。我从购买中获取数据并从供应商处获取数据。 但是当我包含模型主采购订单时。我得到一个空的json。

2 个答案:

答案 0 :(得分:1)

你能做以下

吗?
purchaseOrder
      .findAll({
        include:[{model: Supplier, required:true}, {model: Master, required : false}]
      })

答案 1 :(得分:0)

这是因为您覆盖了associate的{​​{1}}属性,只会执行第二个classMethods功能。

您应该将两个关联定义移动到一个函数中:

associate()