[英]Sequelize Query, many to many relationship issue
我目前有兩個MSSQL表。 一個“項目”表,其中包含一個項目“名稱”,一個“托盤”表中包含一個托盤“條形碼”。 我有一個名為“ 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 }
]
});
您的代碼生成的查詢返回三行-您可以在where
和include
旁邊的選項中添加raw: true
來看到這一點。 我設法得出結論,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`
因此它返回id = 1
所有Item
ItemPallets
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.