2015-12-27 26 views
0

我正在建立一個商店,在數據庫中我有訂單和物品。下面是該機型代碼:續集包含來自路口表的屬性

項目:

var Sequelize = require('sequelize') 
var sequelize = require('./sequelize') 
var Item = sequelize.define('item', { 
    image: { 
    type: Sequelize.STRING, 
    allowNull: false 
    }, 
    itemName: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    field: 'item_name' 
    }, 
    price: { 
    type: Sequelize.INTEGER, 
    allowNull: false 
    } 
}) 

module.exports = Item 

訂單:

var Sequelize = require('sequelize') 
var sequelize = require('./sequelize') 
var Order = sequelize.define('order', { 
    orderNumber: { 
    primaryKey: true, 
    type: Sequelize.UUID, 
    defaultValue: Sequelize.UUIDV4 
    }, 
    shop: { 
    type: Sequelize.INTEGER 
    }, 
    location: { 
    type: Sequelize.STRING 
    } 
}) 

module.exports = Order 

它們通過與屬於多個:

Item.belongsToMany(Order, {through: OrderItem}) 
Order.belongsToMany(Item, {through: OrderItem}) 

的OrderItem的有一個額外的場,'count',我需要返回:

var Sequelize = require('sequelize') 
var sequelize = require('./sequelize') 

var OrderItem = sequelize.define('OrderItem', { 
    count: Sequelize.INTEGER 
}) 

module.exports = OrderItem 

然而,當我嘗試包括OrderItem的模型,這是行不通的。沒有錯誤,沒有。該查詢只是不返回:

Order.findAll({ 
     where: { 
     userId: userId 
     }, 
     include: [{ 
     model: Item, 
     include: [OrderItem] 
     }] 
    }).then(orders => { 
     console.log(orders) 
     res.status(200).json(orders) 
    }) 

如何獲得我需要從sequeilize?

+0

。這是第三張表格,您可以使用該表格輸入oderId和ItemId的值。 –

回答

1

您可以嘗試這樣的事:

Order.findAll({ 
     where: { 
     userId: userId 
     }, 
     include: [{ model: Item, 
     as:'item', 
     through:{attributes:['count']} // this may not be needed 
     }] 
    }).then(orders => { 
    console.log(orders) 
    res.status(200).json(orders) 
    }) 

此外,您的模型必須有一個正確的命名策略。例如。 :

物品 - 必須具備的itemId場,而不是itemNumber, 訂單 - 必須有訂單ID爲主要領域

OrderItem的的結構:

var OrderItem = sequelize.define('OrderItem', { 
    orderId: Sequelize.INTEGER, 
    itemId: Sequelize.INTEGER, 
    count: Sequelize.INTEGER 
}) 

另一種是利用相關領域和模型的直接名稱當您使用belongsToMany()

這裏更多:http://docs.sequelizejs.com/en/latest/docs/associations/

1

原來OrderItem已經嵌套在Item對象中。但是,這並沒有提供一個很好的返回格式,所以問題仍然存在。

1

我千牛流,這是一年後,但尚未..

您可以使用屬性joinTableAttributes得到一個結表中的字段。

例如:你爲什麼要在模型中包含項目OrderItem的

Order.findAll({ 
    where: { 
    userId: userId 
    }, 
    joinTableAttributes: ['count'], 
    include: [{ 
    model: Item, 
    }] 
}).then(orders => { 
    console.log(orders) 
    res.status(200).json(orders) 
})