我目前有两个MSSQL表。 "项目" table,其中包含Item" Name"和一个托盘"包含托盘的桌子"条形码"。我有一个名为" ItemPallets"的连接表,它将多个项链接到多个托盘。
" ItemPallets"包含项目ID(主键)和托盘ID(主键)以及"序列号"。
数据的示例可以是:
项目
+ -- + ---- +
| Id | Name |
+ -- + ---- +
| 1 | 123 |
+ -- + ---- +
托盘
+ -- + ------- +
| Id | Barcode |
+ -- + ------- +
| 1 | ABC |
| 2 | DEF |
+ -- + ------- +
ItemPallets
+ -- + ------ + -------- + ------------- +
| Id | ItemId | PalletId | Serial Number |
+ -- + ------ + -------- + ------------- +
| 1 | 1 | 1 | a400 |
| 2 | 1 | 1 | a401 |
| 3 | 1 | 1 | a402 |
| 4 | 1 | 2 | a403 |
+ -- + ------ + -------- + ------------- +
这意味着托盘ABC中有三个名称为123的项目,分别为序列号a400,a401和a402,以及托盘DEF中名称为123且序列号为a403的最终项目。
我试图找回与Item Pallet关联的所有ItemPallet行,即Item.Pallet [0] .ItemPallets应该包含一个数组,我希望该数组包含三行,序列号为a400 ,a401和a402。
但是,虽然我的阵列包含两个托盘,但为什么每个托盘只包含一个序列号?
我目前使用的代码如下:
models.Item.findOne({
where: {id: 1},
include: [
{ model: models.Pallet }
]
});
答案 0 :(得分:0)
您的代码生成的查询会返回三行 - 您可以通过将raw: true
添加到where
和include
旁边的选项中来查看。我设法得出结论,Sequelize只考虑最后返回的行 - 如果您将查询的order
更改为相反,您将获得序列号为a403的ItemPallets
。
至于现在,我建议你采取另一种方式
models.ItemPallets.findAll({
where: {
ItemId: 1
}
}).then((itemPallets) => {
// here you get all ItemPallets of Item with id 1
});
我会试着找出为什么Sequelize在这种情况下的表现如此,如果我知道任何有用的东西,请告诉你。
修改强>
根据您的评论,还有可能通过查询Item
表
models.Item.findByPrimary(1, {
include: [ models.ItemPallets ]
}).then((itemWithItemPallets) => {
// here you get (example output) { id: 1, ItemPallets: [{ id: 1, ItemId: 1, PalletId: 1, serialNumber: a400 }, { ... }]
});
以上查询
`JOIN ItemsPallets ON ItemsPallets.ItemId = Item.id WHERE Item.id = 1`
所以它返回ItemPallets
Item
id = 1
的所有$this->container->get('security.token_storage')->getToken()->getUser();
。