【发布时间】:2017-03-26 16:50:15
【问题描述】:
我有以下场景,我的应用程序有两个实体:盒子和具有 N 到 N 关系的项目。我正在使用sequelize 和 MySQL。
我正在使用伪代码来表示表格:
Box {
id: Integer primary key
name: String
}
Item {
id: Integer primary key
name: String
}
我已经使用以下 到 关系在两个方向上设置了具有关系 hasMany 的模式:
Box.hasMany(Item, { through: Box_Item });
Item.hasMany(Box, { through: Box_Item });
Box_Item {
id_box: Integer,
id_item: Integer,
item_order: Integer
}
使用primary_key(id_box, id_item)。
我对其进行了测试,我可以在我的实例对象 myBox 上调用 myBox.getItems() 并轻松获取它拥有的所有项目。
我可以拨打电话
BoxModel.findOne({
where: { id: 1 },
include: [{ model: ItemModel }]
});
它通过 Box_Item 自动了解模型之间的关系并正确获取所有内容,除了我没有得到按 item_order 字段排序的结果。该字段是一个从 1 到 N 的数字,表示该框内的物品顺序。
我试过了
BoxModel.findOne({
where: { id: 1 },
include: [
{
model: ItemModel,
order: 'item_order'
}
]
});
但似乎 sequelizejs 还不支持 include 中的顺序(在他们的 github repo 上查看)。
我试图强迫
BoxModel.findOne({
where: { id: 1 },
order: '`box_model`.`item_order`'
include: [ { model: ItemModel } ]
})
查看 sequelize 创建的查询,但它只是将 ORDER BY 放在两个不同的位置(在 INNER JOIN 内部和查询末尾,不知道为什么...),我得到了一个错误。
所以我在 stackoverflow (1) 上搜索了这个,发现了一些问题,但我没有找到使用 ORM 的好方法。
当询问特定的盒子物品时,如何获得按 item_order 字段排序的物品?
【问题讨论】:
标签: mysql node.js sequelize.js