Mysql 是否可以使用sequelize命令中间关系表?
我有以下场景,我的应用程序有两个实体:框和具有N到N关系的项。我正在使用MySQL 我使用伪代码表示表:Mysql 是否可以使用sequelize命令中间关系表?,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我有以下场景,我的应用程序有两个实体:框和具有N到N关系的项。我正在使用MySQL 我使用伪代码表示表: Box { id: Integer primary key name: String } Item { id: Integer primary key name: String } 我使用以下到关系在两个方向上建立了关系模式: Box.hasMany(Item, { through: Box_Item }); Item.hasMany(Box, { through: Bo
Box {
id: Integer primary key
name: String
}
Item {
id: Integer primary key
name: String
}
我使用以下到关系在两个方向上建立了关系模式:
Box.hasMany(Item, { through: Box_Item });
Item.hasMany(Box, { through: Box_Item });
Box_Item {
id_box: Integer,
id_item: Integer,
item_order: Integer
}
使用主键(id_框,id_项)
我对它进行了测试,可以在我的实例对象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似乎还不支持order inside include(查看他们的github回购协议)
我试图强迫
BoxModel.findOne({
where: { id: 1 },
order: '`box_model`.`item_order`'
include: [ { model: ItemModel } ]
})
查看sequelize创建的查询,但它只是将顺序放在两个不同的位置(内部联接和查询结束时,不知道为什么…),我得到了一个错误
所以我在stackoverflow()上搜索了这个,发现了一些问题,但是我没有找到一个使用ORM的好方法
当我询问特定的箱子项目时,如何按项目顺序字段对项目进行排序?经过几天的努力,我找到了一个对我有帮助的答案 在创建Box和Item之间的关系后,我可以轻松调用一个实例:
myBox.getItems({
order: '`box_model`.`item_order`'
});
然后我得到了我期待的结果。但是我必须查看sequelize根据模型创建的查询,并根据它们的重命名规则获得正确的字段
如果需要,可以将作为
参数传递并重命名表