2017-01-23 2 views
1

Я создаю приложение, используя существующую базу данных в Mysql. Я могу получить значения из таблиц, но когда я пытаюсь получить значения из ассоциированных моделей, это не сработает.Sequelize get value from принадлежит отношение

Купить Модель заказа:

"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(). Я получаю данные от покупки и данные от поставщика. Но когда я включаю заказ на покупку модели Master. Я получаю пустой json.

ответ

0

Это потому, что вы перезаписать associate свойство вашего classMethods, и только вторая associate() функция будет выполнена.

Вы должны переместить оба ваших определений ассоциации в одну функцию:

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

Вы можете сделать следующее

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