Node.js 续集多对多格式化程序
我有以下关系:Node.js 续集多对多格式化程序,node.js,sequelize.js,Node.js,Sequelize.js,我有以下关系: var Order = sequelize.define('order', { id : { type : Sequelize.INTEGER, primaryKey : true, autoIncrement : true }, amount : { type : Sequelize.DOUBLE }, change : { type : Sequelize.DOUBLE }, stat
var Order = sequelize.define('order', {
id : {
type : Sequelize.INTEGER,
primaryKey : true,
autoIncrement : true
},
amount : { type : Sequelize.DOUBLE },
change : { type : Sequelize.DOUBLE },
status : { type : Sequelize.ENUM('draft', 'placed', 'in_transit', 'fulfilled', 'rejected') },
statusReason : { type : Sequelize.STRING },
address : { type : Sequelize.STRING },
latitude : { type : Sequelize.DOUBLE },
longitude : { type : Sequelize.DOUBLE }
})
var Beverage = sequelize.define('beverage', {
id : {
type : Sequelize.INTEGER,
primaryKey : true,
autoIncrement : true
},
name : { type : Sequelize.STRING },
picture : { type : Sequelize.STRING },
price : { type : Sequelize.DOUBLE },
max : { type : Sequelize.DOUBLE },
})
var OrderBeverage = sequelize.define('orderBeverage', {
id : {
type : Sequelize.INTEGER,
primaryKey : true,
autoIncrement : true
},
orderId : { type : Sequelize.INTEGER },
beverageId : { type : Sequelize.INTEGER },
amount : { type : Sequelize.INTEGER }
})
Order.hasMany(OrderBeverage, { as : 'beverages' })
OrderBeverage.belongsTo(Beverage)
OrderBeverage.belongsTo(Order)
因此,如果我做一个包含关系的简单查询,我有以下来源和结果:
let orders = yield Order.findAll({
include : [{
model : Order.Beverage,
as : 'beverages',
attributes : ['createdAt'],
include : [ Beverage ]
}]
})
以及生成的json:
[
{
"id": 2,
"amount": 0,
"change": 0,
"status": "placed",
"statusReason": "wrong address given",
"address": "street x, michigan",
"latitude": 0,
"longitude": 0,
"createdAt": "2016-01-12T22:39:32.000Z",
"updatedAt": "2016-01-13T21:05:06.000Z",
"beverages": [
{
"createdAt": "2016-01-12T23:10:48.000Z",
"beverage": {
"id": 1,
"name": "Vodka",
"picture": "somepic",
"price": 30,
"max": 5,
"createdAt": "2016-01-12T22:26:10.000Z",
"updatedAt": "2016-01-12T22:26:10.000Z"
}
}
]
}
]
我需要使属性饮料
成为饮料内容的数组,而不是饮料内容在饮料
键内的{createdAt,beverage}
数组
最终结果如下所示:
[
{
"id": 2,
"amount": 0,
"change": 0,
"status": "placed",
"statusReason": "wrong address given",
"address": "street x, michigan",
"latitude": 0,
"longitude": 0,
"createdAt": "2016-01-12T22:39:32.000Z",
"updatedAt": "2016-01-13T21:05:06.000Z",
"beverages": [
{
"id": 1,
"name": "Vodka",
"picture": "somepic",
"price": 30,
"max": 5,
"createdAt": "2016-01-12T22:26:10.000Z",
"updatedAt": "2016-01-12T22:26:10.000Z"
}
]
}
]
我已经搜索了文档,没有找到它。有什么想法吗?好的,所以我想出了如何做到这一点。无论如何,它都不是直观的 与其使用
命令,不如使用与命令有许多关系的:
Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
我们必须通过OrderBeverage
使用与饮料的关系:
Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
这样,我们只需将查询修改为:
let orders = yield Order.findAll({
include : [{
model : Beverage
}]
})
我认为这没有多大意义,因为饮料属于许多订单饮料,而非订单通过订单饮料属于许多饮料
从某种意义上说,饮料属于许多订单,通过订单饮料
也许我误解了这个想法和概念…好吧,所以我想出了如何做到这一点。无论如何,它都不是直观的
与其使用命令,不如使用与命令有许多关系的:
Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
我们必须通过OrderBeverage
使用与饮料的关系:
Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
这样,我们只需将查询修改为:
let orders = yield Order.findAll({
include : [{
model : Beverage
}]
})
我认为这没有多大意义,因为饮料属于许多订单饮料,而非订单通过订单饮料属于许多饮料
从某种意义上说,饮料属于许多订单,通过订单饮料
也许我误解了这个想法和概念